database - update - Diferencia entre establecer con{merge: true} y actualizar
set document firestore (2)
La forma en que entendí la diferencia:
-
set
sin fusionar sobrescribirá un documento o lo creará si aún no existe -
set
con combinación actualizará los campos en el documento o lo creará si no existe -
update
actualizará los campos pero fallará si el documento no existe -
create
creará el documento pero fallará si el documento ya existe
También hay una diferencia en el tipo de datos que proporciona para
set
y
update
.
Para el
set
, siempre debe proporcionar datos en forma de documento:
set(
{a: {b: {c: true}}},
{merge: true}
)
Con la
update
también puede usar rutas de campo para actualizar los valores anidados:
update({
''a.b.c'': true
})
En Cloud Firestore hay tres operaciones de escritura:
1) agregar
2) establecer
3) actualizar
En los documentos, dice que el uso de
set(object, {merge: true})
fusionará el objeto con el existente.
Lo mismo sucede cuando usa la
update(object)
Entonces, ¿cuál es la diferencia si hay alguna?
Parece extraño que Google duplique la lógica.
Otra diferencia (ampliar la respuesta de Scarygami) entre "establecer con combinación" y "actualizar" es cuando se trabaja con valores anidados.
Si tiene un documento estructurado así:
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
}
}
y desea agregar
{"friend-uid-3" : true}
usando esto:
db.collection(''users'').doc(''random-id'').set({ "friends": { "friend-uid-3": true } },{merge:true})
dará como resultado estos datos:
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
"friend-uid-3": true
}
}
sin embargo,
update
usando esto:
db.collection(''users'').doc(''random-id'').update({ "friends": { "friend-uid-3": true } })
dará como resultado estos datos:
`{
"friends": {
"friend-uid-3": true
}
}`