1

基本上,我的应用有基于位置的帖子,可以被赞成/反对。我需要构建一个查询,该查询返回位于指定区域的前 15 个投票帖子,这些帖子是在过去 24 小时内发布的。来自 sql 背景,我发现使用 JSON 格式和 firebase 内置的按顺序查询和过滤选项很难做到这一点。我意识到我很可能需要进行大量的客户端过滤,所以我想问一下 JSON 结构和查询格式将是什么来最小化客户端过滤。到目前为止,这是我的 JSON 格式的样子:

  "posts" : {

    "-KPFIsDbf3WUljWvBwi-" : {

      "latitude" : 33.64114800203589,
      "longitude" : -116.4236003651668,
      "time" : 1.47129994542173E12,
      "uid" : "wjXpBBJMBVPvRVG48fFkerAw6TD3",
      "upvotes" : 0
},

我尝试使用 Geofire,但不幸的是,它似乎只能按区域查询,并且由于我想按区域和发布时间(除其他外)进行查询,因此使用 Geofire 无法很好地扩展。

4

1 回答 1

0

以下是我在类似设置中将使用 GeoFire 和 Firebase 查询组合执行的操作:

第1步(保存):保存帖子时,先将其保存到数据库中,使用随机ID。然后,获取该 ID,创建 GeoFire 位置,并将您的帖子 ID 设置为位置键。

第 2 步(查询):这将是一个 2 步查询

步骤 2a:获取指定区域内的所有 GeoFire 位置。现在,您可以从快照中获取所有位置的键,并在每个位置附加一个数据事件处理程序。

步骤 2b:维护一个按赞数排序的帖子对象数组。在单个事件侦听器的快照中,首先检查时间戳以查看它是否在过去 24 小时内。接下来,如果数组的计数小于 15,则将您的帖子添加到排序位置(使用适当的解析方法)。如果它已经有 15 个,您需要查看数组中最小的最低元素是否有更多的赞成票。如果没有,您需要在阵列中找到一个位置进行替换。在您完成对 Geofire 的每个快照的解析后,您将获得过去 24 小时内的一系列帖子,按赞数排序。

于 2016-08-17T23:03:51.060 回答