每个用户都有一个Firebase记录“搜索:0”。在某些情况下,我想将当前计数加1。我已经走到这一步了,但由于某种原因,它不起作用:
du.fbAddSearchCount = function() {
var usr = new Firebase(firebase_url + "/users/" + user_uid);
usr.on("value", function(snapshot) {
user = snapshot.val();
var usersRef = ref.child("users");
var fbUser = usersRef.child(user_uid);
fbUser.update( {
searches: user.searches + 1
});
}
}
有什么帮助才能让它发挥作用?
谢谢。
答案 0 :(得分:19)
您可以使用交易
var databaseRef = firebase.database().ref('users').child(user_uid).child('searches');
databaseRef.transaction(function(searches) {
if (searches) {
searches = searches + 1;
}
return searches;
});
答案 1 :(得分:10)
firebase JavaScript SDK v7.14.0中有一种新方法ServerValue.increment()
因为不需要往返,所以性能更好,价格更便宜。
请参见here
添加了ServerValue.increment()以支持原子字段的增量值而无需事务。
API文档here
用法示例:
firebase.database()
.ref('users')
.child(user_uid)
.child('searches')
.set(firebase.database.ServerValue.increment(1))
或者您可以递减,只需将-1
设置为arg函数,如下所示:
firebase.database()
.ref('users')
.child(user_uid)
.child('searches')
.set(firebase.database.ServerValue.increment(-1))
答案 2 :(得分:0)
ref.transection(function(queue_length) {
if(queue_length|| (queue_length === 0))
{
queue_length++;
}
return queue_length;
})
你可以这样使用;)
答案 3 :(得分:0)
使用Firebase Sentinel values递增/递减一个值,而不必先获取该值
增加
db.collection('users').doc('some-user').update({
valueToIncrement: firebase.firestore.FieldValue.increment(1)
})
减量
db.collection('users').doc('some-user').update({
valueToDecrement: firebase.firestore.FieldValue.increment(-1)
})