'read only certain fields in firebase

If I have a database like

users: {
  user1: { 
    name:'qwert', 
    id: 123,
    num: 9999 
  },
  user2: { 
    name:'zxcvb', 
    id: 456,
    num: 8888 
  }
}

How can I read only name of all the users?

My expected result:

{
  user1:{
    name:'qwert'
  }, 
  user2:{
    name:'zxcvb'
  }
}

If I use this in JavaScript:

ref('users').once('value').then((snap)=>{console.log(snap.val())})

I get all the users with that all their data (but I only want name of each)

What changes should I make in my query to get the expected result?

Any suggestions would be highly appreciated and really helpful. I tried searching through the docs but didn't get what I was trying to look for.

My ultimate aim is to cut down the costs of reading unnecessary data.



Solution 1:[1]

To retrieve only the names of the users, then try the following:

firebase.database().ref().child("users").on("value", function (snapshot) {
  snapshot.forEach(function(childSnapshot) {
   var name=childSnapshot.val().name;
  });
});

Here the snapshot is users, then you iterate inside user1 and user2 to be able to access the names of these users and retrieve them.

Solution 2:[2]

I guess I'm late but after some extensive research, there is a way in which we can fetch specific fields from firestore. We can use the select keyword, you're query would be somthing like (I'm using a collection for a generalized approach):

const result = await firebase.database().collection('users').select('name').get();

Where we can access the result.docs to further retrieved the returned filtered result. Thanks!

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Peter Haddad
Solution 2