Maison  >  Article  >  interface Web  >  Comment mettre à jour un seul élément dans un champ de tableau dans Firestore ?

Comment mettre à jour un seul élément dans un champ de tableau dans Firestore ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-15 10:02:03429parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn