Firestore 方法 docRef.set(someData, merge:true) 和 docRef.update(someData) 之间的区别? [复制]
Posted
技术标签:
【中文标题】Firestore 方法 docRef.set(someData, merge:true) 和 docRef.update(someData) 之间的区别? [复制]【英文标题】:Difference between Firestore methods docRef.set(someData, merge:true) and and docRef.update(someData)? [duplicate]Firestore 方法 docRef.set(someData, merge:true) 和 docRef.update(someData) 之间的区别? [复制] 【发布时间】:2019-11-04 07:35:11 【问题描述】:假设我的 Firestore 中存储了以下文档。
collection: "myColection"
document: "myDocument"
fields:
someBoolean: true
someArray: ['a','b','c']
etc
Firebase DOCS - Source
问题
使用以下方法切换someBoolean
字段有什么区别:
选项 1
const docRef = db.collection('myCollection').doc('myDocument');
await docRef.set(
someBoolean: false
,
merge: true);
选项 2
const docRef = db.collection('myCollection').doc('myDocument');
await docRef.update(
someBoolean: false
);
【问题讨论】:
【参考方案1】:如果您已经将myDocument
文档存储在myCollection
集合中,则没有区别。
如果没有现有的myDocument
文档,则会出现差异:set()
可以工作,但update()
无效。
请参阅文档https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentReference#update,其中说“如果应用于不存在的文档,更新将失败。”
【讨论】:
【参考方案2】:您可以在Difference between set with merge: true and update找到答案
简而言之,如果新字段/文档不存在,则使用合并设置将创建新字段/文档,而如果文档不存在,则更新将失败。
对于嵌套值,更新函数的工作方式也不同。它将替换嵌套对象,而 set 会将新值与当前值合并。
【讨论】:
【参考方案3】:set
,覆盖文档,如果找不到则创建
set
和 merge: true
将更新文档中的字段,如果找不到则创建
update
将更新字段,但如果文档不存在则会抛出错误
一个重要的细节,你必须提供路径:
set( foo: bar: baz: true , merge: true )
更新,这就够了
update(
'foo.bar.baz': true
)
【讨论】:
【参考方案4】:如果文档不存在,更新将失败。
【讨论】:
以上是关于Firestore 方法 docRef.set(someData, merge:true) 和 docRef.update(someData) 之间的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
StreamBuilder 未显示来自 firestore 的数据
Nuxtjs 在 asyncData 中获取 Firestore 数据
如何将 Firebase Firestore 数据添加到 s-s-r Nuxt Apps Vuex Store