質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

295閲覧

【Angular15】FireStoreのデータの一部分を編集しようとしたところ、データ構造が配列へと変化してしまう。

2001

総合スコア2

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2023/05/06 23:09

AnuglarのwebアプリにてFireStoreのデータを一部分だけ編集したい

データの編集自体は実現できております。
しかし、指定したフィールドが配列へと変化してしまいます。
他の技術者様のサイトでは指定されたフィールドは配列にはならず、フィールドの文字列のみが編集できています。

環境

Package Version --------------------------------------------------------- @angular-devkit/architect 0.1502.4 @angular-devkit/build-angular 15.2.4 @angular-devkit/core 15.2.4 @angular-devkit/schematics 15.1.6 @angular/cli 15.1.6 @angular/fire 7.5.0 @schematics/angular 15.1.6 rxjs 7.8.0 typescript 4.9.5

上記の環境でanuglarを使用してFireBaseのFirestore内にあるデータを編集するwebアプリを作成しています。

発生している問題

https://qiita.com/Yamamoto0525/items/c1ec1b7ce2350b294aeb#%E5%AE%9F%E8%A1%8C%E7%B5%90%E6%9E%9C-1
上のサイトでは指定したフィールドの文字列のみがうまく編集されていますが、
私の場合は以下のように配列になってしまいます。(以下はperiod6を"オープン"に編集した場合)
イメージ説明

該当のソースコード

上にも書きましたが、編集自体は可能です。

TypeSctipt

1 editData(col: string, doc: string, room string, class: string){ 2 let docRef = this.afs.collection(col).doc(doc); 3 docRef.update({ 4 [room]: [class] 5 }); 6 }

試したこと

update()ではなくset()を使用して編集をしてみましたが、同じように配列へと変化してしまいます。
どなたか解決方法を知っている方が居ましたら教えていただきたく思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/05/07 01:19

[room]: [class] じゃなくて [room]: class では?
2001

2023/05/07 01:43

迅速なコメントありがとうございます。 ご指摘いただいた通り[class] => classに変更したところ解決しました。 []で囲んだ場合、配列の要素の扱いとなってしまうためFireStoreの方も配列を生成したという理解でよろしいでしょうか。 立て続けに質問をしてしまい申し訳ありません。
hoshi-takanori

2023/05/07 02:23

docRef.update の引数に { [room]: class } というオブジェクトリテラルを渡してますよね。 room に [] がついてるのは、{ room: class } のように [] がないとキーが "room" という文字列になってしまうからです。 一方、class という値の方は [] をつけなくても class という変数の値になりますし、[] をつけると配列になります。 https://qiita.com/kmagai/items/95481a3b9fd97e4616c9 https://jsprimer.net/basic/object/
2001

2023/05/07 20:50

丁寧なご解説ありがとうございます。 添付されているURL先の記事もわかりやすかったです! コメントの方を回答として投稿して頂ければ、ベストアンサーにしたいと思います。
guest

回答1

0

自己解決

hoshi-takanoriさんからのコメントにて解決しましたのでコピペします。

docRef.update の引数に { [room]: class } というオブジェクトリテラルを渡してますよね。
room に [] がついてるのは、{ room: class } のように [] がないとキーが "room" という文字列になってしまうからです。
一方、class という値の方は [] をつけなくても class という変数の値になりますし、[] をつけると配列になります。
https://qiita.com/kmagai/items/95481a3b9fd97e4616c9
https://jsprimer.net/basic/object/

投稿2023/05/16 06:15

2001

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問