如何在Document()调用完成后检索新的整数数据.设置(MapFieldValue{string_key, Incr



我试图在Firestore中自动增加整数值,并在服务器端完成Set()操作后读取客户端上的值,并保证另一个Set()调用不会覆盖服务器上的值,然后为客户端检索值。如果没有这种保证,似乎就有可能出现不需要的数据重复。

然而,我似乎无法在我的代码中找到保证这一点的方法。

这是我目前为止写的内容:

doc_ref.Get().OnCompletion([this, ref_name](const firebase::Future<firebase::firestore::DocumentSnapshot>& future) {
if (future.error() == 0) {
const firebase::firestore::DocumentSnapshot& document = *future.result();
db->Collection("collection_name").Document(ref_name).Set({ ref_name, firebase::firestore::FieldValue::Increment(1) })
.OnCompletion([this, ref_name](const firebase::Future<void>& void_future) {
dr_uc.Get().OnCompletion([this, ref_name](const firebase::Future<firebase::firestore::DocumentSnapshot>& new_future) {
if (new_future.error() == 0) {
const firebase::firestore::DocumentSnapshot& new_document = *new_future.result();
int user_name_count = new_document.Get(ref_name).integer_value();
}
});
});
}
});

对firebase::firestore::FieldValue::Increment(1)的调用保证整数值将在服务器端自动更新,但是Get()调用似乎不保证从服务器读取未被另一个Set()调用在检索数据之前写入的数据。

是否有一些方法来提供这种保证使用Firebase的Firestore?

递增操作符只是确保递增在服务器上自动发生,并且不涉及任何与客户端之间的值传输。

如果你想完全控制操作的顺序,包括读,你可能想用一个事务来完成。

最新更新