In Firestore können Arrays in Dokumenten verschachtelt werden. Es ist jedoch wichtig zu verstehen, dass sich Array-Felder in Firestore anders verhalten als Arrays in anderen Programmiersprachen.
Problemstellung:
Aktualisierung eines bestimmten Elements innerhalb eines Array-Felds in einem Firestore-Dokument kann eine Herausforderung sein. Versuche, ein verschachteltes Feld innerhalb eines Arrays, wie beispielsweise items[0].meta.description, direkt zu aktualisieren, können zu unerwarteten Ergebnissen führen.
Erster Ansatz:
Zunächst haben Sie es versucht um ein verschachteltes Feld mit dem folgenden Code zu aktualisieren:
const key = `items.${this.state.index}.meta.description`; const property = `hello bar`; this.design.update({ [key]: property })
Dieser Ansatz entfernt jedoch alle anderen Felder aus dem Objekt an der angegebenen Stelle index.
Alternativer Ansatz:
Bei Ihrem anschließenden Versuch haben Sie das gesamte Metaobjekt neu geschrieben:
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 })
Während dieser Ansatz das verschachtelte Feld erfolgreich aktualisierte, Es hat das Array in ein Objekt umgewandelt.
Lösung:
Firestore bietet keine direkte Möglichkeit, ein bestimmtes Element innerhalb eines Arrays zu aktualisieren. Stattdessen müssen Sie das gesamte Array aus dem Dokument lesen, es im Speicher ändern und dann das gesamte Array-Feld aktualisieren.
Dies kann mit den folgenden Schritten erreicht werden:
Hier ist ein Beispielcode:
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 });
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich ein einzelnes Element in einem verschachtelten Array-Feld in Firestore?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!