如何在Firebase中增加记录?

时间:2015-07-15 06:37:46

标签: javascript firebase firebase-realtime-database

每个用户都有一个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
       });
    }
}

有什么帮助才能让它发挥作用?

谢谢。

4 个答案:

答案 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) 
})

Documentation Reference