В Cloud Firestore есть три операции записи:
1) добавить
2) set (набор)
3) update
В документации говорится, что использование set(object, {merge: true})
объединит объект с существующим.
То же самое происходит при использовании. update(object)
Итак, в чем разница, если она есть? Кажется странным, что Google будет дублировать логику.
create
метод в API?set
работает с данными в форме документа, гдеupdate
принимает пары путь к полю и значение. Это означает, что вы можете вносить изменения в глубоко вложенные значения с помощьюupdate
более громоздкихset
. Например:set({a: {b: {c: true}}}, {merge: true})
противupdate('a.b.c', true)
.Еще одно различие (расширение ответа Scarygami) между «набором слиянием» и «обновлением» заключается в работе с вложенными значениями.
если у вас есть документ с такой структурой:
и хочу добавить
{"friend-uid-3" : true}
используя это:
db.collection('users').doc('random-id').set({ "friends": { "friend-uid-3": true } },{merge:true})
приведет к этим данным:
однако
update
используя это:db.collection('users').doc('random-id').update({ "friends": { "friend-uid-3": true } })
приведет к этим данным:
источник
{ merge: true }
и функция обновления.update
, вы можете использовать точечную нотацию . Поведение перезаписиupdate
будет другим, если вы используете / не используете точечную нотацию.Для документов: https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
Точечная запись позволяет обновлять одно вложенное поле без перезаписи другого вложенного поля. Если вы обновите вложенное поле без записи через точку, вы перезапишете все поле карты.
Как указано выше, это заменяет всю структуру друзей.
Это не так.
источник