Heim >Web-Frontend >js-Tutorial >Wie aktualisiere ich ein einzelnes Element in einem verschachtelten Array-Feld in Firestore?

Wie aktualisiere ich ein einzelnes Element in einem verschachtelten Array-Feld in Firestore?

Barbara Streisand
Barbara StreisandOriginal
2024-11-26 03:03:13600Durchsuche

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

So aktualisieren Sie ein einzelnes Element in einem Array-Feld in Firestore

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:

  1. Lesen Sie das gesamte Array aus dem Dokument mit der Methode get().
  2. Verwenden Sie Methoden wie map() oder find(), um das spezifische Element innerhalb des Dokuments zu finden und zu ändern Array.
  3. Aktualisieren Sie das Array-Feld mit der Methode set() oder update() mit dem geänderten Array.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn