ios - Firebase 数据库结构和查询格式选项

标签 ios swift firebase firebase-realtime-database geofire

基本上,我的应用程序有基于位置的帖子,可以赞成/反对。 我需要构建一个查询,以返回位于指定区域且在过去 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/

相关文章:

swift - 如何解决编码错误: “Use of Unresolved Identifier SafariVC” . The error is next to “SafariVC.delegate = self”

ios - 如何在swift中重载赋值运算符

swift - 将具有 "posted"帖子的用户个人资料图像加载到 TableView 上

ios - 在 SwiftUI 中将 @FetchRequest 与 Core Data 一起使用时修改 nil 排序行为

iphone - iOS6 上的 IOHIDEventSystemCreate 失败

iOS FMDB Sqlite 包装器。内存不足

ios - ScrollView 理解

ios - 带有 allowUserInteraction 的 UIView.animate 仅在动画的最后一帧启用 UIButton

ios - ld : framework not found FirebaseAnalytics after upgrading from 4. x.x 到 5.x.x firebase 通过 cocoapods

ios - 试验 Firebase - 推送通知