Firebase 设置firestore对象(如果该对象不存在)

Firebase 设置firestore对象(如果该对象不存在),firebase,google-cloud-firestore,google-cloud-functions,firebase-admin,Firebase,Google Cloud Firestore,Google Cloud Functions,Firebase Admin,我遇到的情况是firebase写入唤醒了一个云函数。 在云函数中,我执行.set() 我的问题是,云函数至少保证一次策略。而不是一个恰好一个策略。这意味着,有时会发生多个函数醒来并写入到完全相同的位置 我知道我可以使用事务,并询问“文档是否已经存在”,如果不存在,则不做任何事情。但我想知道,是否有一个标志,上面写着set(“data”,exist=false)等等 到目前为止,我在文档中找不到任何东西。我希望由于最终用户延迟的原因可以避免额外的.get() 请记住,云函数使用AdminSDK。这

我遇到的情况是firebase写入唤醒了一个云函数。 在云函数中,我执行
.set()

我的问题是,云函数至少保证一次
策略。而不是一个
恰好一个策略
。这意味着,有时会发生多个函数醒来并写入到完全相同的位置

我知道我可以使用事务,并询问“文档是否已经存在”,如果不存在,则不做任何事情。但我想知道,是否有一个标志,上面写着
set(“data”,exist=false)
等等

到目前为止,我在文档中找不到任何东西。我希望由于最终用户延迟的原因可以避免额外的
.get()


请记住,云函数使用AdminSDK。这意味着,不能将安全规则用作解决方案。

我认为,没有事务,就不可能实现您想要的

有趣的是,反过来也是可能的:使用
update()
只能在文档已经存在时才允许写入


正如您已经说过的:通常这种情况应该在安全规则中捕获。但是,由于云函数使用AdminSDK来执行其写入操作,因此它绕过了这些规则。

我认为,如果没有事务,您想要什么是不可能的

有趣的是,反过来也是可能的:使用
update()
只能在文档已经存在时才允许写入


正如您已经说过的:通常这种情况应该在安全规则中捕获。但由于云函数使用Admin SDK执行其写入操作,因此它绕过了这些规则。

没错。反向存在于更新中。所以我希望我只是错过了它,或者它没有被记录下来。是的,没错。反向存在于更新中。所以我希望我只是错过了它,或者它没有被记录下来。如果你写的是幂等的,这就不重要了。我知道,重复执行死刑的情况应该很少见。但遗憾的是,在创建/设置数据时,我需要一个随机值。我想事务是唯一合理的解决方案。如果您的写入是幂等的,那么这并不重要。我知道,重复执行死刑的情况应该很少见。但遗憾的是,在创建/设置数据时,我需要一个随机值。我想交易是唯一合理的解决办法。