如果我有一个我提供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的新文档,同时避免引用现有文档(如果存在则抛出错误)。
答案 0 :(得分:0)
你需要use a transaction。在交易中,您首先在该位置调用get()
,以确保nothing exists。然后你write to the same location来创建文档。