基本上,我的应用程序有基于位置的帖子,可以赞成/反对。 我需要构建一个查询,以返回位于指定区域且在过去 24 小时内发布的前 15 个赞成的帖子。来自 sql 背景,我发现使用 JSON 格式和 firebase 的内置查询顺序和过滤选项很难做到这一点。我意识到我很可能需要进行大量的客户端过滤,所以我问的是什么 JSON 结构和查询格式可以最大限度地减少客户端过滤。到目前为止,这是我的 JSON 格式:
"posts" : {
"-KPFIsDbf3WUljWvBwi-" : {
"latitude" : 33.64114800203589,
"longitude" : -116.4236003651668,
"time" : 1.47129994542173E12,
"uid" : "wjXpBBJMBVPvRVG48fFkerAw6TD3",
"upvotes" : 0
},
我尝试使用 Geofire,但不幸的是,它似乎只能按区域查询,并且由于我想按区域和发布时间(以及其他内容)进行查询,因此使用 Geofire 无法很好地扩展。
最佳答案
在类似的设置中,结合使用 GeoFire 和 Firebase 查询,我会这样做:
第 1 步(保存):保存帖子时,首先使用随机 ID 将其保存到数据库中。然后,获取该 ID,创建一个 GeoFire 位置,并将您的帖子 ID 设置为位置键。
第 2 步(查询):这将是一个两步查询
第 2a 步:获取指定区域内的所有 GeoFire 位置。现在,您可以从快照中获取所有位置的键,并在每个位置上附加一个数据事件处理程序。
第 2b 步:维护一个按赞数排序的帖子对象数组。在单个事件监听器的快照中,首先检查时间戳是否在最近 24 小时内。接下来,如果数组的计数小于 15,请将您的帖子添加到排序位置(使用适当的解析方法)。如果它已经有 15 个,则您需要查看数组中最小的最低元素是否有更多赞成票。如果没有,您需要在数组中找到一个位置来替换。在解析完来自 Geofire 的每个快照后,您将获得过去 24 小时内的帖子数组,并按赞数排序。
关于ios - Firebase 数据库结构和查询格式选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006883/