Firebase Firestore在更新后获取Field.increment的值,而不读取文档数据

Firebase Firestore在更新后获取Field.increment的值,而不读取文档数据,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,是否有一种方法可以检索使用firestore.FieldValue.increment更新的文档字段的更新值,而无需请求文档 var countersRef=db.collection('system').doc('counters'); 等待参考更新({ nextOrderCode:firebase.firestore.FieldValue.increment(1) }); //在不询问文档数据的情况下获取更新的nextOrderCode? 这与成本无关,但与可靠性有关。例如,如果我想为每个

是否有一种方法可以检索使用
firestore.FieldValue.increment
更新的文档字段的更新值,而无需请求文档

var countersRef=db.collection('system').doc('counters');
等待参考更新({
nextOrderCode:firebase.firestore.FieldValue.increment(1)
});
//在不询问文档数据的情况下获取更新的nextOrderCode?
这与成本无关,但与可靠性有关。例如,如果我想为每个订单创建一个增加的代码,则无法保证如果
=2
订单同时发生,如果我在文档更新解析后立即读取增量值,则会有不同的代码,因为如果
=2
写入发生在第一次读取之前,然后,即使下一个TorderCode具有适当的提前增量,至少有2个文档将具有相同的代码

我们可以使用,如增量工作前
字段。增量
功能:

试试看{
const orderCodesRef=admin.firestore().doc('system/counters/order/code');
让orderCode=null;
等待admin.firestore().runTransaction(异步事务=>{
const orderCodesDoc=wait transaction.get(orderCodesRef);
如果(!orderCodesDoc.存在){
抛出{原因:'无订单代码文档'};
}
设{next}=orderCodesDoc.data();
orderCode=next++;
更新(orderCodesRef,{next});
});
如果(订单代码!==null){
newOrder.code=订单代码;
const orderRef=wait admin.firestore().collection('orders').add(newOrder);
返回成功({orderId:orderRef.id});
}否则{
返回失败(“无订单-代码-结果”);
}
}捕获(错误){
console.error('committer::error',error);
抛出错误。CantWriteDatabase({error});
}

这是不可能的。如果您想知道该值,则必须在更新后阅读文档

如果需要控制数字的值以防止其无效,则必须使用事务来确保增量不会写入无效值
FieldValue.increment()
在这种情况下不是一个好的选择