【问题标题】:Firebase query of child key子键的 Firebase 查询
【发布时间】:2017-12-20 07:53:33
【问题描述】:

我的 firebase 数据库中有下一个结构:

{
    events: {
       event_1:{
           startdate: 120934210,
           enddate: 120934211,
           members: {
               uid_1: true,
               uid_2: true,
               ...
           }
       },
       event_2:{
           startdate: 120934210,
           enddate: 120934211,
           members: {
               uid_2: true,
               uid_3: true,
               ...
           }
       },
       ...
    }
}

我有一个节点事件,每个孩子都是一个事件,每个事件都有一个成员列表。问题是,如何查询某个成员的所有事件?例如,具有成员 uid_2 的所有事件。我正在使用 angularfire2 和 angular 4。我正在尝试做这样的事情:

db.list('events/',ref => ref.orderByChild('members').equalTo(uid))

请帮帮我。

【问题讨论】:

  • 试试db.list('events/',ref => ref.orderByChild('members/'+uid).equalTo(true))

标签: javascript angular firebase firebase-realtime-database


【解决方案1】:

您当前的数据结构使您可以轻松找到特定事件的成员。 not 是否允许您轻松确定特定用户的事件。为此,您应该添加一个倒排数据结构。

还建议不要嵌套不同的实体类型,而是将它们存储在顶级节点中。

对于您的数据,这会导致四个可能的顶级节点:

users: {
  $uid: { ... }
},
events: }
  $eventid: { ... }
},
event_users: {
  $event_id: {
    $uid: true
  }
},
user_events: {
  $uid: {
    $event_id: true
  }
}

现在您可以轻松读取(无需查询)事件的成员,用户的事件。

我还建议您查看:

【讨论】:

  • 是的,这是一种更好的查找 event_user 关系和 user_event 关系的结构,但我需要多次读取数据库。有没有办法一次读取所有信息?感谢您的帮助。
  • 您需要分别从每个顶级节点读取。虽然代码有点混乱,但它并不像您预期​​的那么慢,因为 Firebase 对请求进行了管道传输。见stackoverflow.com/questions/35931526/…
  • 谢谢,我将阅读 NoSQL 数据建模。我是 nosql 数据库的新手,有时有点乱。谢谢你救了我。
猜你喜欢
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2021-11-17
  • 1970-01-01
相关资源
最近更新 更多