No Cloud Firestore, existem três operações de gravação:
1) adicionar
2) definir
3) atualização
Nos documentos diz que usar set(object, {merge: true})
irá mesclar o objeto com o existente.
O mesmo acontece quando você usa update(object)
Então, qual é a diferença, se houver? Parece estranho que o Google irá duplicar a lógica.
create
método na API?set
opera em dados em formato de documento, ondeupdate
leva o caminho do campo e pares de valor. Isso significa que você pode fazer alterações em valores profundamente aninhados com osupdate
que são mais complicadosset
. Por exemplo:set({a: {b: {c: true}}}, {merge: true})
vsupdate('a.b.c', true)
.Outra diferença (estendendo a resposta de Scarygami) entre "definir com mesclagem" e "atualizar" é ao trabalhar com valores aninhados.
se você tiver um documento estruturado assim:
e quero adicionar
{"friend-uid-3" : true}
usando isto:
db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})
resultará nestes dados:
no entanto,
update
usando isto:db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })
resultará nestes dados:
fonte
{ merge: true }
a função de atualização.update
, você pode usar a notação de ponto . O comportamento de substituição deupdate
é diferente se você usar / não usar a notação de ponto.Por documentos: https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
A notação de ponto permite que você atualize um único campo aninhado sem substituir outro campo aninhado. Se você atualizar um campo aninhado sem notação de ponto, você substituirá todo o campo do mapa.
Conforme declarado acima, isso substitui toda a estrutura de amigos.
Isso não funciona.
fonte