Mise à jour d'un seul élément dans un champ de tableau dans Firestore
La documentation FirebaseFirestore décrit les façons d'interagir avec les champs de tableau, y compris l'ajout ou la suppression d'éléments. Cependant, il lui manque une méthode pour mettre à jour directement un élément à l'intérieur du tableau.
Pour un document comme :
{ name: 'Foo', items: [ { name: 'Bar', meta: { image: 'xyz.png', description: 'hello world' } }, { name: 'Rawr', meta: { image: 'abc.png', description: 'hello tom' } } ] }
Pour modifier une propriété imbriquée comme items[0].meta.description, l'approche suivante ne fonctionnera pas :
const key = `items.${this.state.index}.meta.description`; const property = `hello bar`; this.design.update({ [key]: property }).then(() => { console.log("done") }).catch(function(error) { message.error(error.message); });
Elle supprime toutes les propriétés de l'index du tableau ciblé et ne conserve que la description propriété.
Réécrire l'objet entier n'est pas non plus souhaitable :
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 }).then(() => { this.setState({ [key]: meta }) }).catch(function(error) { message.error(error.message); });
Il convertit l'ensemble du tableau d'éléments en un objet.
Au lieu de cela, lisez le tableau à partir du document, apportez des modifications en mémoire et mettez à jour l'intégralité du champ du tableau modifié :
const docRef = firestore.collection('collection').doc('document'); docRef.get().then(doc => { const items = doc.data().items; items[0].meta.description = "hello bar"; docRef.update({ items: items }); });
Cela garantit que seule la propriété prévue est mise à jour dans le tableau élément.
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!