首页 > 解决方案 > 仅读取 firebase 中的某些字段

问题描述

如果我有一个像

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())})

我得到所有用户的所有数据(但我只想要每个用户的名称)

我应该在查询中进行哪些更改以获得预期结果?

任何建议都将受到高度赞赏并且非常有帮助。我尝试搜索文档,但没有得到我想要查找的内容。

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

标签: javascriptfirebasefirebase-realtime-database

解决方案


无法仅从当前数据模型中选择名称,Firebase 始终检索完整节点。因此,您要么必须按照 Peter 的回答,读取所有数据但在客户端提取用户名,要么必须修改数据模型以允许用例。

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

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

使用这种结构,只读取名称是微不足道的。

另见:


推荐阅读