【发布时间】:2021-12-26 00:43:01
【问题描述】:
假设在事务中我将更新一些文档,但是,如果文档不存在,我将创建一个(即,transaction.set())。现在我的问题是,如果文档还没有创建,而其他一些进程调用创建了它,我可以确定事务将被再次调用,这样我就不会丢失数据?
如果文档始终存在,很明显,如果其他进程对其进行写入,则事务将重新启动,但是,如果文档不存在,事务是否会监视它,以便如果它存在在执行过程中创建的是否会启动重新启动?
这是我做交易的方式:
await db.runTransaction(async (transaction) => {
docRef = db.collection("my_collection").doc("some_id");
const doc = await transaction.get(sDocRef);
let initial_data = {}
if (sDoc.exists)
{
initial_update = initial_update({...doc.data()}) //actually only retrieve a subset of fields
}
//Some updates on other docs
....
new_data = ....
await transaction.set(docRef, {...intial_data, ...new_data}, merge=True);
}
【问题讨论】:
标签: firebase google-cloud-firestore transactions