Firestore doc Update with Merge true
Posted
技术标签:
【中文标题】Firestore doc Update with Merge true【英文标题】: 【发布时间】:2020-07-08 23:35:43 【问题描述】:今天在使用 Admin SDK 在 Cloud Firestore 上工作时,我不小心忘记了将 .update 替换为 .set 和 merge true 选项,令我惊讶的是,查询正常工作并创建了文档。我删除了 merge:true 然后我得到了文档不存在错误。我使用 merge:true 再次对其进行了测试,并再次创建了文档。我在文档中找不到任何关于此的内容。任何人都可以解释这种行为。
let query = userRolesRef
.doc(user).update(
isDeliveryPerson:true
,
merge: true
);
【问题讨论】:
你是对的,使用 Admin SDK 它会创建一个新文档(我已经在 Cloud Function 中对其进行了验证)。我已经彻底查看了 Node.js documentation 并且我看不出它应该这样做的任何原因,即使使用 Node.js Admin SDK 的update()
方法可以采用多个参数。我建议您联系 Firebase 支持和/或在此 Google 群组中发帖:groups.google.com/forum/#!forum/firebase-talk
【参考方案1】:
对于集合中已存在的文档,使用 .update
和 .set
与合并 true 选项之间存在没有区别。这两个操作之间的区别仅在于不存在的文档。比如.set
加上merge true选项会在文档不存在时创建文档,而使用.update
时操作会失败。
【讨论】:
嗨@AlexMamo,OP 实际上已经检测到,当使用update()
他在问题中解释的方式和使用Admin SDK时,它确实创建 一个文档(即使这个文档以前不存在,令人惊讶的是调用update()
会创建没有任何错误的文档)。我已经在 Cloud Function 中验证了它,确实是这样。
嘿雷诺。嗯,你确定吗?在回答之前,我阅读了留下的docs:更新此 DocumentReference 引用的文档中的字段。如果应用于不存在的文档,更新将失败。.
您好,Alex,我确定!我已经对其进行了彻底的测试,令我惊讶的是,它确实有效。 PS:请注意,您在评论中链接的文档是 JS SDK 之一,而不是 Admin SDK。
在这种情况下,联系 Firebase 团队绝对是最好的解决方案。是的,right docs 是您评论中链接的那些。从另一个添加书签的页面复制并粘贴。
@AlexMamo 我在文档中也读到了相同的内容,但 Renaud 已经澄清了在使用 update with merge true 时创建的文档。我会写信给 Firebase 团队。以上是关于Firestore doc Update with Merge true的主要内容,如果未能解决你的问题,请参考以下文章
Firestore 方法 docRef.set(someData, merge:true) 和 docRef.update(someData) 之间的区别? [复制]
Firestore 是不是有 Dart 接口 - 使用 https://firebase.google.com/docs/firestore/quickstart 中的 API?
开发环境安装 Visual Studio Community 2013 开发环境 ( 下载 Visual Studio Community 2013 with Update 5 版本的安装包 )