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的主要内容,如果未能解决你的问题,请参考以下文章

添加Firebase Firestore对象进行本机反应

如何更新firestore中的数组[重复]

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 版本的安装包 )

从 firestore 获取 doc