Dans Cloud Firestore, il y a trois opérations d'écriture:
1) ajouter
2) ensemble
3) mise à jour
Dans la documentation, il est dit que l'utilisation de set(object, {merge: true})
fusionnera un objet avec un 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.
La façon dont j'ai compris la différence:
set
sans fusion va écraser un document ou le créer s'il n'existe pas encore
set
avec fusion mettra à jour les champs du document ou le créera s'il n'existe pas
update
mettra à jour les champs mais échouera si le document n'existe pas
create
créera le document mais échouera si le document existe déjà
Il existe également une différence dans le type de données que vous fournissez à set
et update
.
Pour set
vous devez toujours fournir des données en forme de document:
set(
{a: {b: {c: true}}},
{merge: true}
)
Avec update
, vous pouvez également utiliser des chemins de champs pour mettre à jour les valeurs imbriquées:
update({
'a.b.c': true
})
Une autre différence (étendant la réponse de Scarygami) entre "set with merge" et "update", concerne l'utilisation de valeurs imbriquées.
si vous avez un document structuré comme ceci:
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
}
}
et veut 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:
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
"friend-uid-3": true
}
}
cependant update
en utilisant ceci:
db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })
se traduira par ces données:
`{
"friends": {
"friend-uid-3": true
}
}`