Транзакции 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 });
}
});
});
Если две транзакции читают и изменяют одно и то женесуществующий doc col/doc
произойдет ли сбой одного из них и попытка повторного запуска?
Также метод create имеет свое собственное поведение при сбое - «Операция не выполнит транзакцию, если документ существует в указанном месте.». Безопасно ли использование create по сравнению с set + merge в этом контексте?