在连接中排序和过滤的好方法 - Firebase实时数据库结构

时间:2017-03-19 02:57:15

标签: android firebase firebase-realtime-database

我正在为Firebase设置实时数据库,并遇到了一个让我质疑我的数据库结构的问题。我目前的结构如下:

{
"events": {
    $topics:{
        $eventID:{
            "title": "testTitle",
            "description": "testDescription",
            "startDateTime": "testStartDateTime",
            "lat": "testLat",
            "lng": "testLng",
            "voteCt": "testVoteCt"
        }
    }
}

这背后的想法是我可以根据主题轻松过滤数据。我遇到的问题是当我想要从startDateTime排序的所有$主题中获取事件时。根据我的阅读,这个给定的结构是不可能的。如果不是这样,请有人纠正我。

或者,我考虑按如下方式构建我的事件:

{
"events": {
    $eventID:{
          "title": "testTitle",
          "description": "testDescription",
          "startDateTime": "testStartDateTime",
          "lat": "testLat",
          "lng": "testLng",
          "voteCt": "testVoteCt",
          "topic": "testTopic"
        }
}

使用这种方法,我可以在使用startDateTime进行排序时聚合所有事件,但是当我按startDateTime排序时,我也无法按主题进行过滤。我的最后一个希望就是让客户端读取所有事件(大量数据)并循环显示那些主题与所应用的过滤器匹配的事件。这个解决方案有效但很多工作要做一些看似简单的事情。

有人能想到更好的解决方案吗?感谢。

1 个答案:

答案 0 :(得分:1)

这个结构怎么样:

 "events": {
        $eventID:{
              "title": "testTitle",
              "description": "testDescription",
              "startDateTime": "testStartDateTime",
              "lat": "testLat",
              "lng": "testLng",
              "voteCt": "testVoteCt",
              "topic": "testTopic"
          }
  }

    "event_topic":{
           "testTopic1": {
                  "event_topic_id1":{
                       "event": "event id 1"
                      "startDateTime":"testStartDateTime"

                   }
           }
     }

现在,如果要查询testTopic1并按startDateTime排序,只需通过on_add监听event_topic / testTopic1并通过startDateTime对子进行排序,对于child_add事件中的每一个,使用事件ID查询事件详细信息。