Énoncé du problème :
Vous avez un document dans Firestore avec un champ de tableau contenant objets. Vous devez mettre à jour un champ spécifique dans un objet à l'intérieur du tableau. Cependant, tenter de mettre à jour directement à l'aide de la notation par points (items.${index}.meta.description) ne fonctionne pas correctement.
Firestore ne prend actuellement pas en charge la mise à jour directe d'un élément spécifique dans un tableau indexé. Envisagez plutôt les alternatives suivantes :
Option 1 : réécrivez l'intégralité du tableau
Au lieu de mettre à jour le champ spécifique, lisez l'intégralité du tableau à partir du document, créez le champ souhaité. modification en mémoire, puis mettez à jour le champ du tableau modifié dans son ensemble :
const key = `items.${this.state.index}.meta`; let items = this.state.items; items[this.state.index].meta.description = 'hello bar'; this.design.update({ [key]: items, })
Cette approche réécrit efficacement l'intégralité du tableau, ce qui peut être inefficace si le tableau est grand.
Option 2 : Utiliser les opérations sur le tableau
Bien que Firestore n'autorise pas les mises à jour directes des éléments de tableau existants, vous pouvez toujours ajouter ou supprimer des éléments à l'aide d'opérations sur le tableau. Par exemple, pour ajouter un nouvel élément au tableau :
this.design.update({ items: FieldValue.arrayUnion({ name: 'New Item', meta: { image: 'def.png', description: 'hello new item', } }) })
Pour supprimer un élément, utilisez FieldValue.arrayRemove().
Recommandation :
Si le tableau est relativement petit, Option 1 (réécriture de l'intégralité du tableau) peut être une solution simple. Cependant, si le tableau est grand, L'option 2 (en utilisant des opérations sur le tableau) est plus efficace car elle évite d'écraser l'intégralité du tableau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!