How to increment a record in Firebase?

后端 未结 5 654
余生分开走
余生分开走 2020-12-05 19:42

I have a Firebase record \"searches: 0\" for each user. On some event, I\'d like to add 1 to what the current count is. I\'ve gotten this far, but for some reason, it\'s not

相关标签:
5条回答
  • 2020-12-05 20:14
    database.ref("users").child("user_uid").transaction((user) => {
        if (user) {
            user.searches = actives.searches + 1;
        }
        return user;
    });
    

    It works for you. I did that '.child('searches')' but It doesn't work.(nothing changed).

    0 讨论(0)
  • 2020-12-05 20:17

    There's a new method ServerValue.increment()in firebase JavaScript SDK v7.14.0

    It's better for performance and cheaper since no round trip is required.

    See here

    Added ServerValue.increment() to support atomic field value increments without transactions.

    API Docs here

    Usage example:

    firebase.database()
        .ref('users')
        .child(user_uid)
        .child('searches')
        .set(firebase.database.ServerValue.increment(1))
    

    Or you can decrement, just put -1 as function arg like so:

    firebase.database()
        .ref('users')
        .child(user_uid)
        .child('searches')
        .set(firebase.database.ServerValue.increment(-1))
    
    0 讨论(0)
  • 2020-12-05 20:18

    You can use transaction

    var databaseRef = firebase.database().ref('users').child(user_uid).child('searches');
    
    databaseRef.transaction(function(searches) {
      if (searches) {
        searches = searches + 1;
      }
      return searches;
    });
    
    0 讨论(0)
  • 2020-12-05 20:21

    For the Realtime Database the use of transaction seems to be the best way to do it. See the answer from Sunday G Akinsete

    From his answer and the related comments:

    firebase
        .database()
        .ref('users')
        .child(user_uid)
        .child('searches')
        .transaction(function(searches) {
            return (searches || 0) + 1
        })
    

    For the Firestore Database you can use the Firebase Sentinel values to increment/decrement a value that without having to fetch it first

    Increment

    firebase
        .firestore()
        .collection('users')
        .doc('some-user')
        .update({ 
             valueToIncrement: firebase.firestore.FieldValue.increment(1) 
        })
    

    Decrement

    firebase
        .firestore()
        .collection('users')
        .doc('some-user')
        .update({ 
            valueToDecrement: firebase.firestore.FieldValue.increment(-1) 
        })
    

    Documentation Reference

    0 讨论(0)
  • 2020-12-05 20:22
    ref.transection(function(queue_length) {
        if(queue_length|| (queue_length === 0))
        {
            queue_length++; 
        }
        return queue_length;
    
    })
    

    You can use like this ;)

    0 讨论(0)
提交回复
热议问题