En Cloud Firestore hay tres operaciones de escritura:
1) agregar
2) establecer
3) actualización
En los documentos dice que el uso set(object, {merge: true})
fusionará el objeto con uno existente.
Lo mismo sucede cuando usas update(object)
Entonces, ¿cuál es la diferencia, si la hay? Parece extraño que Google duplique la lógica.
create
método en la API?set
opera sobre datos en forma de documento, dondeupdate
toma la ruta de campo y los pares de valores. Esto significa que puede realizar cambios en valores profundamente anidadosupdate
que son más engorrososset
. Por ejemplo:set({a: {b: {c: true}}}, {merge: true})
vsupdate('a.b.c', true)
.Otra diferencia (extendiendo la respuesta de Scarygami) entre "establecer con fusión" y "actualizar", es cuando se trabaja con valores anidados.
si tiene un documento estructurado así:
y quiero agregar
{"friend-uid-3" : true}
usando esto:
db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})
resultará en estos datos:
sin embargo
update
usando esto:db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })
resultará en estos datos:
fuente
{ merge: true }
que la función de actualización.update
, puede usar la notación de puntos . El comportamiento de sobrescritura deupdate
es diferente si usa o no la notación de puntos.Por documentos: https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
La notación de puntos le permite actualizar un solo campo anidado sin sobrescribir otro campo anidado. Si actualiza un campo anidado sin notación de puntos, sobrescribirá todo el campo del mapa.
Como se indicó anteriormente, esto reemplaza toda la estructura de amigos.
Esto no lo hace.
fuente