【问题标题】:Firestore doc Update with Merge trueFirestore 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

标签: firebase google-cloud-firestore firebase-admin


【解决方案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 团队。
猜你喜欢
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2021-04-12
  • 2014-10-18
相关资源
最近更新 更多