我有与 Pricing when updating more than one field of the same document within a Firestore transaction 中描述的相同的问题,但接受的答案对我来说似乎模棱两可。 OP 询问事务内同一文档中多个更新操作的定价,接受的答案是:
<块引用>无论您在一次操作中更改了文档中的多少个字段,您始终需要进行一次写入操作。如果您一个接一个地进行写入,您将需要承担两次写入操作。
但是在答案讨论中,接受的答案作者说:
<块引用>只要您修改同一文档中的字段,一次交易就被视为一次操作。在您的情况下,交易将花费您一次读取操作。
OP 示例显示他在事务内的同一个文档中执行两次更新:
mDb.runTransaction(new Transaction.Function<Void>() {
@Override
public Void apply(final Transaction transaction) throws FirebaseFirestoreException {
DocumentReference documentReference = mDb.collection("collectionOne").document("documentOne");
/*
some code
*/
transaction.update(documentReference, App.getResourses().getString(R.string.field_one), FieldValue.increment(1));
transaction.update(documentReference, App.getResourses().getString(R.string.field_two), FieldValue.increment(1));
return null;
}
}).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d("Debugging", "Transaction correctly executed.");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w("Debugging", "Transaction failure.", e);
}
});
这对我来说似乎模棱两可,因为答案作者说:
<块引用>...如果您一个接一个地进行写入,您将需要执行两次写入操作。
这似乎正是 OP 示例所显示的内容,但后来它也说:
<块引用>...在您的情况下,交易将花费您一次读取操作。
最后,在上面的例子中 - 在一个交易中的同一个文档中的两次更新 - 价格是两次写入还是一次写入,因为它们是在同一个文档和交易块中进行的?