我正在为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排序时,我也无法按主题进行过滤。我的最后一个希望就是让客户端读取所有事件(大量数据)并循环显示那些主题与所应用的过滤器匹配的事件。这个解决方案有效但很多工作要做一些看似简单的事情。
有人能想到更好的解决方案吗?感谢。
答案 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查询事件详细信息。