在 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不提供直接方法來更新數組中的特定項目。相反,您必須從文件中讀取整個數組,在記憶體中對其進行修改,然後更新整個數組欄位。
這可以透過以下步驟來實現:
以下是範例程式碼:
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中文網其他相關文章!