我正在为 Firebase 设置一个实时数据库,遇到了一个问题,这让我质疑我的数据库结构。我目前的结构如下:
{
"events": {
$topics:{
$eventID:{
"title": "testTitle",
"description": "testDescription",
"startDateTime": "testStartDateTime",
"lat": "testLat",
"lng": "testLng",
"voteCt": "testVoteCt"
}
}
}
这背后的想法是我可以轻松地根据主题过滤数据。我遇到的问题是当我想从按 startDateTime 排序的所有 $topics 中获取事件时。从我读过的内容来看,这个给定的结构是不可能的。如果不是这种情况,请有人纠正我。
或者,我考虑按如下方式组织我的 Activity :
{
"events": {
$eventID:{
"title": "testTitle",
"description": "testDescription",
"startDateTime": "testStartDateTime",
"lat": "testLat",
"lng": "testLng",
"voteCt": "testVoteCt",
"topic": "testTopic"
}
}
通过这种方法,我可以在按 startDateTime 排序时聚合我的所有事件,但在按 startDateTime 排序时我也无法按主题过滤。我最后的希望只是让客户端读取所有事件(大量数据)并循环显示主题与应用过滤器匹配的事件。该解决方案有效,但做一些看起来如此简单的事情需要做很多工作。
有人能想出更好的解决方案吗?谢谢。
最佳答案
这个结构怎么样:
"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 排序,只需监听 event_topic/testTopic1 并在 child_add 上按 startDateTime 对子项排序,对于每个 on child_add 事件,使用事件 ID 来查询事件详细信息。
关于android - 结合排序和过滤的好方法 - Firebase 实时数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42882422/