278 votes

Différence entre set with {merge: true} et update

Dans Cloud Firestore, il existe trois opérations d'écriture:

1) ajouter

2) ensemble

3) mise à jour

Dans la documentation, il est indiqué que l'utilisation de set(object, {merge: true}) fusionnera l'objet avec celui existant.

La même chose se produit lorsque vous utilisez update(object) Alors quelle est la différence, le cas échéant? Il semble étrange que Google duplique la logique.

625voto

Scarygami Points 7703

La façon dont j'ai compris la différence:

  • set sans fusion permettra de remplacer un document ou le créer s'il n'existe pas encore

  • set avec fusion permettra de mettre à jour les champs dans le document ou le créer si il n'existe pas

  • update permettra de mettre à jour les champs, mais échouera si le document n'existe pas

  • create permettra de créer le document, mais d'échouer si le document existe déjà

Il y a aussi une différence dans le type de données que vous fournissez à l' set et update.

Pour set vous devez toujours fournir le document en forme des données:

set(
  {a: {b: {c: true}}},
  {merge: true}
)

Avec update vous pouvez également utiliser le champ chemins d'accès pour la mise à jour de imbriqués les valeurs:

update({
  'a.b.c': true
})

138voto

Finlay Percy Points 884

Une autre différence (extension de Scarygami réponse) entre "set avec fusion" et de "mise à jour", est lorsque l'on travaille avec un ensemble de valeurs.

si vous avez un document structuré comme ceci:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
   }
 }

et souhaitez ajouter des {"friend-uid-3" : true}

en utilisant ceci:

db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})

entraînera dans cette base de données:

 {
   "friends": {
     "friend-uid-1": true,
     "friend-uid-2": true,
     "friend-uid-3": true
   }
 }

toutefois update utiliser ce:

db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })

entraînera dans cette base de données:

 `{
   "friends": {
     "friend-uid-3": true
   }
 }`

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X