如果我有
这样的数据库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())})
我获得了所有用户的所有数据(但我只想要每个用户的名字)
我应该对查询进行哪些更改才能获得预期的结果?
任何建议将不胜感激,并且非常有帮助。我尝试搜索文档,但没有得到想要的内容。
我的最终目的是降低读取不必要数据的成本。
答案 0 :(得分:2)
要仅检索用户名,请尝试以下操作:
firebase.database().ref().child("users").on("value", function (snapshot) {
snapshot.forEach(function(childSnapshot) {
var name=childSnapshot.val().name;
});
});
这里的快照是users
,然后在user1
和user2
中进行迭代,以便能够访问这些用户的名称并检索它们。
答案 1 :(得分:1)
无法从当前数据模型中仅选择名称,Firebase始终会检索完整的节点。因此,您将不得不做Peter回答的事情,读取所有数据但提取用户名客户端,或者您必须修改数据模型以允许用例。
后者非常简单。如果要加载用户名列表,则应在数据库中存储用户名列表:
users: {
user1: {
name:'qwert',
id: 123,
num: 9999
},
user2: {
name:'zxcvb',
id: 456,
num: 8888
}
},
usernames: {
user1: 'qwert',
user2: 'zxcvb'
}
使用这种结构,仅读取名称很简单。
另请参阅: