仅读取Firebase中的某些字段

时间:2018-06-28 09:45:32

标签: javascript firebase firebase-realtime-database

如果我有

这样的数据库
users: {
  user1: { 
    name:'qwert', 
    id: 123,
    num: 9999 
  },
  user2: { 
    name:'zxcvb', 
    id: 456,
    num: 8888 
  }
}

如何只读取所有用户的姓名?

我的预期结果:

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

如果我在JavaScript中使用它:

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

我获得了所有用户的所有数据(但我只想要每个用户的名字)

我应该对查询进行哪些更改才能获得预期的结果?

任何建议将不胜感激,并且非常有帮助。我尝试搜索文档,但没有得到想要的内容。

  

我的最终目的是降低读取不必要数据的成本。

2 个答案:

答案 0 :(得分:2)

要仅检索用户名,请尝试以下操作:

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

这里的快照是users,然后在user1user2中进行迭代,以便能够访问这些用户的名称并检索它们。

答案 1 :(得分:1)

无法从当前数据模型中仅选择名称,Firebase始终会检索完整的节点。因此,您将不得不做Peter回答的事情,读取所有数据但提取用户名客户端,或者您必须修改数据模型以允许用例。

后者非常简单。如果要加载用户名列表,则应在数据库中存储用户名列表:

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

使用这种结构,仅读取名称很简单。

另请参阅: