Answers:
我了解差异的方式:
set如果没有,merge它将覆盖文档或创建它(如果尚不存在)
set使用merge会更新文档中的字段,或者如果不存在则创建它
update 将更新字段,但如果文档不存在将失败
create 将创建文档,但如果文档已存在则失败
您提供给set和的数据类型也有所不同update。
因为set您总是必须提供文档形数据:
set(
{a: {b: {c: true}}},
{merge: true}
)
使用,update您还可以使用字段路径来更新嵌套值:
update({
'a.b.c': true
})
set对文档形状的数据进行操作,其中update采用字段路径和值对。这意味着您可以使用来更改深层嵌套的值,update而这些值更麻烦set。例如:set({a: {b: {c: true}}}, {merge: true})vs update('a.b.c', true)。
“使用合并设置”和“更新”之间的另一个区别(扩展了Scarygami的答案)是使用嵌套值时。
如果您的文档结构如下:
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
}
}
并要添加 {"friend-uid-3" : true}
使用这个:
db.collection('users').doc('random-id').set({
"friends": {
"friend-uid-3": true
}
},{merge:true})
将产生以下数据:
{
"friends": {
"friend-uid-1": true,
"friend-uid-2": true,
"friend-uid-3": true
}
}
但是update使用这个:
db.collection('users').doc('random-id').update({
"friends": {
"friend-uid-3": true
}
})
将产生以下数据:
`{
"friends": {
"friend-uid-3": true
}
}`
{ merge: true }与更新功能具有相同作用的选项。
每个文档:https : //firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects
点表示法使您可以更新单个嵌套字段,而不会覆盖其他嵌套字段。如果更新不带点符号的嵌套字段,则将覆盖整个地图字段。
如上所述,这将替换整个朋友结构。
db.collection('users').doc('random-id').update({
"friends": {
"friend-uid-3": true
}
})
这不是。
db.collection('users').doc('random-id').update({
"friends.friend-uid-3": true
})
create在API的哪里找到方法?