创建没有auto-id的新文档,而不会意外地引用现有文档

时间:2018-03-12 01:51:39

标签: google-cloud-firestore angularfire2

如果我有一个我提供ID的文档集合(即不是Firestore自动ID),我如何确定创建新文档而不是引用现有文档?

例如,如果我有一个文档标识为foo的集合bar,我可以将其引用为(给定db是注入的AngularFirestore服务)this.db.doc('foo/bar')

然后我想要创建另一个foo文档,我可以检查它是否已经存在类似

checkExits(id: string): Observable<boolean> {
  const docRef = this.db.doc(`foo/${id}`);
  return docRef.snapshotChanges().map(change => change.payload.exists);
}

但是,当我检查它是否存在时,创建文档时,是否有可能创建它?这样当我尝试创建新文档时,它会引用现有文档并覆盖它吗?即this.db.doc('foo/bar').set({})

如何创建指定id的新文档,同时避免引用现有文档(如果存在则抛出错误)。

1 个答案:

答案 0 :(得分:0)

你需要use a transaction。在交易中,您首先在该位置调用get(),以确保nothing exists。然后你write to the same location来创建文档。