Firebase 如果文档已经不存在,我如何创建和触摸文档?

Firebase 如果文档已经不存在,我如何创建和触摸文档?,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有一个例子,如果我的Firestore数据库中有数据,我希望它在创建新文档时失败,并且绝对不会覆盖该文档或向该文档发送任何更新 我分批做这些,所以我不能让任何一批失败,或它杀死整个批次 以下是我尝试/排除的: batch.update-由于更新数据而排除 batch.set-排除该选项,因为默认设置是覆盖数据 batch.set…{merge:true}-排除,因为它将覆盖我已有的任何字段 batch.create-这似乎很有希望,但在文档已经存在时失败 let batch = db.batc

我有一个例子,如果我的Firestore数据库中有数据,我希望它在创建新文档时失败,并且绝对不会覆盖该文档或向该文档发送任何更新

我分批做这些,所以我不能让任何一批失败,或它杀死整个批次

以下是我尝试/排除的:

batch.update
-由于更新数据而排除
batch.set
-排除该选项,因为默认设置是覆盖数据
batch.set…{merge:true}
-排除,因为它将覆盖我已有的任何字段
batch.create
-这似乎很有希望,但在文档已经存在时失败

let batch = db.batch()
...
batch.xyz(refToCreateOnly, Data) // this should be successful either way such that it does not kill the batch, and only updates if the ref does not exist
...
await batch.commit()

处理事务是否是最好的/可能唯一的方法?

是的,在添加文档之前,您唯一的选择是使用事务验证文档是否不存在。

事务或安全规则。如果一个失败,安全规则是否会终止批处理?是的,整个批处理必须成功,如果一个安全规则会杀死一个批处理,而一个批处理需要完全成功,那么这就行不通了。我认为这不是复制品。如果你不知道如何将搜索与安全规则配对,你永远也找不到第一个,而你发布的第二个链接的答案只是关于更新。