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的哪里找到方法?