Firestore事务对其中读取的文档持有悲观的锁定。即使文档不存在,此锁也适用吗?
下面是nodejs docs中的示例:
firestore.runTransaction(transaction => {
let documentRef = firestore.doc('col/doc');
return transaction.get(documentRef).then(doc => {
if (doc.exists) {
transaction.update(documentRef, { count: doc.get('count') + 1 });
} else {
transaction.create(documentRef, { count: 1 });
}
});
});
如果两个事务读取并修改了相同的不存在的文档col/doc
,其中之一将失败并尝试重新运行吗?
create方法还具有其自身的失败行为-“如果文档位于指定位置,则该操作将使事务失败。”在这种情况下,与set + merge相比,create的使用是否安全?
答案 0 :(得分:1)
通常,如果在事务中读取文档后文档的内容发生变化,则在同一笔事务中写回文档之前,将重试事务处理程序,并且文档的新内容将为在重试中看到。
在您的特定情况下, $disk = 'dropbox';
$file = Storage::disk($disk)->get('Apps/CordovaFast/sample-connection-1425502866/cordova.ios.js');
return Storage::download($file);
的内容从不存在更改为存在。我完全希望它能像处理文档中的任何其他更改一样工作,并且如果它突然不存在的话会导致重试事务。