Firebase Firestore文档更新,合并为true

Firebase Firestore文档更新,合并为true,firebase,google-cloud-firestore,firebase-admin,Firebase,Google Cloud Firestore,Firebase Admin,今天,在使用Admin SDK处理Cloud Firestore时,我无意中忘记将.update替换为.set with merge true选项,令我惊讶的是,查询成功了,文档也创建了。我删除了merge:true,然后我得到了文档不存在错误。我用merge:true和documentcreated再次测试了它。我在文档中找不到关于此的任何信息。有人能解释这种行为吗 let query = userRolesRef .doc(user).update(

今天,在使用Admin SDK处理Cloud Firestore时,我无意中忘记将.update替换为.set with merge true选项,令我惊讶的是,查询成功了,文档也创建了。我删除了merge:true,然后我得到了文档不存在错误。我用merge:true和documentcreated再次测试了它。我在文档中找不到关于此的任何信息。有人能解释这种行为吗

let query = userRolesRef
           .doc(user).update(
                    {
                      isDeliveryPerson:true
                    },
                     { merge: true }
                );

对于集合中已经存在的文档,使用
.update
.set
with merge true选项之间没有区别。这两种操作之间的区别仅适用于不存在的文档。例如,
.set
with merge true选项将在文档不存在时创建文档,而当使用和
.update
时,操作将失败。

Hi@AlexMamo,OP实际检测到,当使用
update()
时,他在问题中解释的方式以及使用Admin SDK时,它确实创建了一个文档(即使这个文档以前不存在,调用
update()
创建文档时也不会出现任何错误)。我已经在一个云函数中验证过了,事实就是这样。嗯,你确定吗?在回答之前,我阅读了此DocumentReference引用的文档中的“保持:更新”字段。如果应用到一个不存在的文档,更新将失败。你好,Alex,是的,我确定!我已经对它进行了彻底的测试,令我惊讶的是,它确实有效。注:请注意,您在评论中链接的文档是JS SDK的文档,而不是Admin SDK的文档。在这种情况下,联系Firebase团队肯定是最好的解决方案。是的,这些是你评论中链接的。从另一个书签页面复制并粘贴。@AlexMamo我也在文档中阅读了相同的内容,但Renaud已经澄清了文档是在使用update with merge true时创建的。我会写信给Firebase团队。你是对的,使用AdminSDK它会创建一个新的文档(我已经在云函数中验证过)。我已经仔细研究了Node.js,我不认为它有什么理由这样做,即使在Node.js Admin SDK中,
update()
方法可以使用几个参数。我建议您联系Firebase支持部门和/或您在此Google群中发布: