首頁 >web前端 >js教程 >如何更新 Firestore 中嵌套數組欄位中的單一項目?

如何更新 Firestore 中嵌套數組欄位中的單一項目?

Barbara Streisand
Barbara Streisand原創
2024-11-26 03:03:13592瀏覽

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() 等方法來定位和修改文件中的特定元素陣列。
  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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn