javascript - 火力地堡 : Querying data inside an unknown name key (child inside another child)

标签 javascript react-native firebase-realtime-database

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

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

Firebase

此代码返回所有组:

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 的查询,但结果为空。

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 的新手,我不知道是否可以查询另一个名字未知的 child 中的 child

感谢所有的帮助:D

最佳答案

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

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

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

另见:

关于javascript - 火力地堡 : Querying data inside an unknown name key (child inside another child),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55534286/

相关文章:

javascript - 使用 JQuery 从输入数字中获取值并更改 css

javascript - React Native 中的 Flex header 布局

ios - 尝试更新 firebase 但节点值被删除

android - 与多个用户共享同一个 Firebase 数据库

javascript - Angular 2 和 ngmodule 注入(inject)器

javascript - Optimizely如何欺骗chrome不提示加载不安全内容

javascript - 多个同步 Owl Carousel

firebase - 如何将身份验证用户链接到 Firestore 中的集合?

javascript - 如何在 React Native 中从图像中获取颜色

javascript - 错误 : container has not been made global - how to solve?