ホームページ >ウェブフロントエンド >jsチュートリアル >Firestore の入れ子になった配列フィールド内の単一の項目を更新するにはどうすればよいですか?

Firestore の入れ子になった配列フィールド内の単一の項目を更新するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-26 03:03:13590ブラウズ

How to Update a Single Item in a Nested Array Field in Firestore?

Firestore 内の配列フィールドの単一項目を更新する方法

Firestore では、ドキュメント内で配列をネストできます。ただし、Firestore の配列フィールドは他のプログラミング言語の配列とは動作が異なることを理解することが重要です。

問題ステートメント:
Firestore ドキュメントの配列フィールド内の特定の要素を更新する挑戦的になる可能性があります。 items[0].meta.description など、配列内のネストされたフィールドを直接更新しようとすると、予期しない結果が生じる可能性があります。

最初のアプローチ:
最初に、次のコードを使用してネストされたフィールドを更新するには:

const key = `items.${this.state.index}.meta.description`;
const property = `hello bar`;

this.design.update({
    [key]: property
})

ただし、このアプローチでは、オブジェクトから他のすべてのフィールドが削除されます。

代替アプローチ:
その後の試行では、メタ オブジェクト全体を書き換えました:

const key = `items.${this.state.index}.meta`;
const property = e.target.value;
let meta = this.state.meta;
meta[e.target.id] = property;

this.design.update({
    [key]: meta
})

このアプローチでは、ネストされたフィールドは正常に更新されました。 、配列をobject.

解決策:
Firestore には、配列内の特定の項目を更新する直接的な方法がありません。代わりに、ドキュメントから配列全体を読み取り、メモリ内で変更してから、配列フィールド全体を更新する必要があります。

これは、次の手順を使用して実現できます:

  1. get() メソッドを使用してドキュメントから配列全体を読み取ります。
  2. map() や find() などのメソッドを使用して、ドキュメント内の特定の要素を見つけて変更します。 array.
  3. 変更した配列で set() または update() メソッドを使用して配列フィールドを更新します。

コード例は次のとおりです:

const docRef = firestore.doc(`document/${id}`);

let items;
// Read the document and retrieve the items array
await docRef.get().then((doc) => {
  if (doc.exists) {
    items = doc.data().items;
  }
});

// Update the specific element in the array
const updatedItem = items.find((item) => item.name === 'Bar');
updatedItem.meta.description = 'hello bar';

// Update the entire array field with the modified array
await docRef.update({ items });

以上がFirestore の入れ子になった配列フィールド内の単一の項目を更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。