基本上,我的应用有基于位置的帖子,可以上调/下调。 我需要构建一个查询,返回位于指定区域的前15个upvoted帖子,并在过去24小时内完成。来自sql背景,我发现通过顺序和过滤选项,JSON格式和firebase的内置查询不必要地做到了这一点。我意识到我很可能需要进行大量的客户端过滤,所以我问的是JSON结构和查询格式将最小化客户端过滤。到目前为止,这是我的JSON格式:
"posts" : {
"-KPFIsDbf3WUljWvBwi-" : {
"latitude" : 33.64114800203589,
"longitude" : -116.4236003651668,
"time" : 1.47129994542173E12,
"uid" : "wjXpBBJMBVPvRVG48fFkerAw6TD3",
"upvotes" : 0
},
我尝试使用Geofire,但不幸的是,它似乎只能按区域查询,而且由于我想按地区和时间查询(除其他事项外),使用Geofire将无法很好地扩展。
答案 0 :(得分:0)
以下是使用GeoFire和Firebase查询组合在类似设置中执行的操作:
步骤1(保存):保存帖子时,首先使用随机ID将其保存到数据库。然后,获取该ID,创建GeoFire位置,并将您的帖子ID设置为位置键。
步骤2(查询):这将是一个2步查询
步骤2a:获取指定区域内的所有GeoFire位置。现在,您可以从快照中获取所有位置的键,并在每个位置附加单个数据事件处理程序。
步骤2b:按照upvotes的数量维护一个排序的post对象数组。在单个事件侦听器的快照中,首先检查时间戳以查看它是否在过去24小时内。接下来,如果数组的计数小于15,请将您的帖子添加到排序位置(使用适当的解析方法)。如果它已经有15,那么你需要查看数组中最小的最低元素是否有更多的upvotes。如果没有,您需要在阵列中找到要替换的位置。在完成对Geofire的每个快照的解析之后,您将获得过去24小时内的一系列帖子,按照upvotes进行排序。