Search code examples
javascriptfirebasefirebase-realtime-databasebackendcounter

Getting total Number of User Items in Firebase Realtime database in javascript


I have been trying to get amount of users that have same "referralId" in my firebase Realtime database,

users {
  AY35bkc5cbkufik8gfe3vjbmgr {
    email: james @gmail.com
    verify: none
    referralid: AY35ja35
  }
  B16fty9jDchfNgdx7Fxnjc5nxf5v {
    email: mobilewisdom @gmail.com
    verify: none
    referralid: AY35ja35
  }
}

How can I use JavaScript to count the amount of account with referralid:AY35ja35 I tried:

      const query = ref.orderByChild('referralid').equalTo('AY35ja35');
      query.get().then((results) => {
       console.log(Object.keys(results.val()).length);
      results.forEach((snapshot) => {
      console.log(snapshot.key, snapshot.val());
  });
});

But am getting this error in my console: Uncaught TypeError: query.get is not a function


Solution

  • In v8/namespaced syntax that'd be:

    const ref = firebase.database().ref('users');
    const query = ref.orderByChild('referralid').equalTo('AY35ja35');
    const results = await query.get();
    console.log(Object.keys(results.val()).length);
    results.forEach((snapshot) => {
      console.log(snapshot.key, snapshot.val());
    });
    

    Or if you're in an environment where await doesn't work:

    const ref = firebase.database().ref('users');
    const query = ref.orderByChild('referralid').equalTo('AY35ja35');
    query.get().then((results) => {
      console.log(Object.keys(results.val()).length);
      results.forEach((snapshot) => {
        console.log(snapshot.key, snapshot.val());
      });
    });
    

    In v9/modular syntax the equivalent would be:

    const ref = ref(getDatabase(), 'users');
    const query = query(ref, orderByChild('referralid'), equalTo('AY35ja35'));
    const results = await get(query);
    console.log(Object.keys(results.val()).length);
    results.forEach((snapshot) => {
      console.log(snapshot.key, snapshot.val());
    });
    

    Or if you're in an environment where await doesn't work:

    const ref = ref(getDatabase(), 'users');
    const query = query(ref, orderByChild('referralid'), equalTo('AY35ja35'));
    get(query).then((results) => {
      console.log(Object.keys(results.val()).length);
      results.forEach((snapshot) => {
        console.log(snapshot.key, snapshot.val());
      });
    });