Dans Cloud Firestore, il existe trois opérations d'écriture:
1) ajouter
2) ensemble
3) mise à jour
Dans la documentation, il est dit que l'utilisation 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.
create
méthode dans l'API?set
fonctionne sur des données en forme de document, oùupdate
prend le chemin de champ et les paires de valeurs. Cela signifie que vous pouvez apporter des modifications aux valeurs profondément imbriquées avecupdate
qui sont plus lourdes avecset
. Par exemple:set({a: {b: {c: true}}}, {merge: true})
vsupdate('a.b.c', true)
.Une autre différence (étendant la réponse de Scarygami) entre "set with merge" et "update", est lorsque vous travaillez avec des valeurs imbriquées.
si vous avez un document structuré comme ceci:
et je veux ajouter
{"friend-uid-3" : true}
en utilisant ceci:
db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})
se traduira par ces données:
cependant en
update
utilisant ceci:db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })
se traduira par ces données:
la source
{ merge: true }
la fonction de mise à jour.update
, vous pouvez utiliser la notation par points . Le comportement d'écrasement deupdate
est différent si vous utilisez / n'utilisez pas la notation par points.Par documents: https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
La notation par points vous permet de mettre à jour un seul champ imbriqué sans écraser un autre champ imbriqué. Si vous mettez à jour un champ imbriqué sans notation par points, vous écraserez tout le champ de la carte.
Comme indiqué ci-dessus, cela remplace toute la structure d'amis.
Ce n'est pas le cas.
la source