【问题标题】:Firebase: Querying data inside an unknown name key (child inside another child)Firebase:查询未知名称键中的数据(另一个孩子中的孩子)
【发布时间】:2019-08-27 07:01:06
【问题描述】:

我正在开发一个 React Native 应用程序并且有一个查询疑问。

我需要返回所有 groups(例如“group-id-01”),其中提供的 UID 存在于 members 中。

此代码返回所有组:

const memberGroup = firebase.database().ref('groups')
memberGroup.once('value')
        .then((snapshot) => {
          console.log('snapshot');
          console.log(snapshot.val());
        })
        .catch((error) => {
          console.log('Erro');
          console.log(error);
        });

我得到的结果:

"group-id-01"
  "members"
    "no-uid-provided":"Belem"
    "oZlTzlbCTGaZfsrzyxqABlnxt2e2":"Julia"
  "name":"Rolling Stones"

我想要的结果:

"group-id-01"
  "members"
    "oZlTzlbCTGaZfsrzyxqABlnxt2e2":"Julia"
  "name":"Rolling Stones"

嗯……

我用 .orderByChild 和 .equalTo 尝试了一些查询,但结果为 null。

const memberGroup = firebase.database().ref('groups')
.orderByChild('oZlTzlbCTGaZfsrzyxqABlnxt2e2')
.equalTo('Julia')

memberGroup.once('value')
        .then((snapshot) => {
          console.log('snapshot');
          console.log(snapshot.val());
        })
        .catch((error) => {
          console.log('Erro');
          console.log(error);
        });

我是 Firebase 的新手,我不知道是否可以查询 另一个名称未知的孩子中的孩子

感谢所有帮助:D

【问题讨论】:

    标签: javascript react-native firebase-realtime-database


    【解决方案1】:

    您当前的结构允许您轻松查找给定组的成员。它不允许您轻松查找给定用户的组。要允许后者,您需要添加一个附加数据结构(通常称为反向索引),将用户映射回组。

    userGroups
      uid1
        groupid1: true
        groupid2: true
      uid2
        groupid2: true
        groupid3: true
    

    这意味着您正在复制数据以允许额外的用例,这在 NoSQL 数据库中很常见。

    另见:

    【讨论】:

    • 那是我的第一个 NoSql 项目,重复数据对我的“SQL”头脑来说真的很难。非常感谢弗兰克!
    • 是的,我也花了一些时间来适应。我在关于在 Firestore 之上构建地理查询的演讲中谈到了这一点:youtube.com/watch?v=mx1mMdHBi5Q。但在某些时候它变成了第二天性,所以我希望你也有同样的经历。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2019-03-23
    相关资源
    最近更新 更多