为了增加数据库中的int值,我首先使用侦听器获取该值,将其递增1,然后将新值设置为database。这有效,但我想知道是否有更简单的方法。这种方式似乎太多了。
答案 0 :(得分:11)
在Firebase数据库中没有增加值(或进行其他计算)的服务器端方法。
你的方法是这样做的一种方式,但它有可能导致竞争条件。
结果现在可能不正确(取决于您的用例)。
在这种情况下,使其工作的一种方法是使用Firebase事务,它将读取和写入组合到一个函数中。
Firebase Database documentation涵盖交易。我强烈建议阅读它。花几个小时就可以防止出现许多问题。来自文档:
postRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Long value = mutableData.getValue(Long.class);
if (value == null) {
mutableData.setValue(0);
}
else {
mutableData.setValue(value + 1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
Log.d(TAG, "transaction:onComplete:" + databaseError);
}
});
答案 1 :(得分:8)
从firebase JavaScript SDK v7.14.0起,您可以使用ServerValue.increment()
在Firebase中增加值
方法1
var userRef= firebase.database().ref("user/user_id_123");
userRef.push({
likes: firebase.database.ServerValue.increment(1)
});
方法2
firebase.database()
.ref('user')
.child('user_id_123')
.child('likes')
.set(firebase.database.ServerValue.increment(1))
您还可以将浮点数或负值传递给增量函数