仅下载具有子密钥的Firebase快照

时间:2018-02-06 01:48:09

标签: javascript firebase firebase-realtime-database

我的数据结构如下所示(删除了不必要的部分):

{
  "threads" : {
    "PUSHID" : {
      "info" : {
        "members" : {
          "uid" : true,
          "uid2" : true
        }
      }
    }
  }
}

我试图编写一些javascript来提取用户所在线程的快照,但我无法在不拉动每个线程的快照的情况下找到工作方式。这是我的代码,它提取每个线程快照。

firebase.database().ref('threads').on('child_added', function(snapshot) {
    if (snapshot.hasChild('info/members/' + userUid)) {
        // Display thread info
    }
});

我尝试使用.orderByChild('info/members/' + userUid)进行查询并删除空快照,但我必须为每个.indexOn添加userUid,这显然不切实际。

1 个答案:

答案 0 :(得分:0)

您当前的结构可以轻松/高效地查找线程的用户。但您的用例是查找用户的线程。您需要扩充数据模型以允许用例:

{
  "user_threads" : {
    "uid": {
      "PUSHID": true,
      "PUSHID2": true
    },
    "uid2": {
      "PUSHID": true,
      "PUSHID3": true
    }
  }
}

然后阅读:

firebase.database().ref('user_threads/'+userUid).on('child_added', function(snapshot) {
  ...
});

使用NoSQL数据库时,修改/扩展数据模型以匹配应用程序的用例非常常见。