在 iOS Firebase SDK 上查询条件复杂的数据

Posted

技术标签:

【中文标题】在 iOS Firebase SDK 上查询条件复杂的数据【英文标题】:Query data with complex condition on iOS Firebase SDK 【发布时间】:2016-03-03 17:44:26 【问题描述】:

我正在制作一个集成 Firebase SDK 的 ios。我遇到了关于它的查询数据的问题。

例如,我在 Firebase 上有一个 JSON 数据

来源https://www.firebase.com/blog/2014-11-04-firebase-realtime-queries.html


  "bruhathkayosaurus": 
    "appeared": -70000000,
    "height": 25,
    "length": 44,
    "order": "saurischia",
    "vanished": -70000000,
    "weight": 135000
  ,
  "lambeosaurus": 
    "appeared": -76000000,
    "height": 2.1,
    "length": 12.5,
    "order": "ornithischia",
    "vanished": -75000000,
    "weight": 5000
  ,
  ...

来自https://dinosaur-facts.firebaseio.com/的数据

我可以查询一些高度满足以下条件的恐龙吗:

height * height + length * length > 100(仅举例)

如果可能,如何使用 iOS Firebase SDK 做到这一点?

关于使用 iOS Firebase SDK 查询数据的参考 https://www.firebase.com/blog/2014-11-04-firebase-realtime-queries.html

【问题讨论】:

您能否使用实际 Firebase 数据结构的副本/粘贴而不是图片来更新您的答案?您应该查看 Firebase 仪表板右上角的“导出数据”按钮,以使其更轻松。实际数据帮助我们,帮助您,因为我们不必重新输入所有内容。 其实我已经在 Firebase 上创建了应用,但是我想知道它是否可以先解决我的问题,所以我想先确定 【参考方案1】:

(请注意问题发生了变化,因此我之前提供的正确答案对新问题不再有效)

新答案是否定的,不能同时直接查询两个值。

但是,有一些方法可以解决这个问题,而且由于您使用的是 iOS,这很容易:

1) 查询所有恐龙以将它们加载到对象中并将它们存储在数组中 2) 制作一个 NSPredicate 以根据您的方程式提取一个数组

您应该真正考虑如何在 Firebase 中对数据进行建模,因为如果您正确地对其进行模态化,您将能够查询 Firebase 以获取您想要的内容,而不是在客户端处理它。

哦,看看这篇文章

Filter and sort on multiple values with Firebase


对于原始问题中发布的方程式:高度 * 2 + 10 > 100

答案是肯定的,你可以这样做

使用静态数字或通过公式定义高度,然后在 .queryStartingAtValue 参数中使用它。

说 baseHeight = 45 或 baseHeight = (100-10) / 2 或 baseHeight = 2^5

ref.queryOrderedByChild("height").queryStartingAtValue(baseHeight)
   .observeEventType(.ChildAdded, withBlock:  snapshot in
    println(snapshot.key)
)

您可以通过添加 .queryEndingAtValue 来进一步缩小结果范围,这将为您提供一个高度范围

maxHeight = baseHeight + 10

ref.queryOrderedByKey().queryStartingAtValue(baseHeight).queryEndingAtValue(maxHeight)
   .observeEventType(.ChildAdded, withBlock:  snapshot in
    println(snapshot.key)
)

【讨论】:

感谢@Jay,您的解决方案很棒,但我已经用新的更复杂的示例条件更新了我的问题。这个条件包含2个字段,它们聚集成一个条件,还有可能吗? 既然提供的答案是正确的,你应该接受它,然后创建一个新问题,因为参数发生了变化,使它成为一个不同的问题。 谢谢@Jay,我接受了你的答案,你能回答新的吗,如果正确,我也会接受你的新答案 对不起,我看到了你的新答案

以上是关于在 iOS Firebase SDK 上查询条件复杂的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 上显示使用 firebase-cpp-sdk 收到的 FCM“数据”消息?

Firebase - iOS SDK - 按子值过滤

Firebase iOS SDK 崩溃与 FIRInstallations validateAppOptions:appName

Flutter - Firebase SDK

Firebase pod 是在 iOS 上使用 Crashlytics 的必要条件吗?

为啥 Firebase 控制台在 SDK 已与我的 Android 和 iOS 应用程序集成时要求我实施 SDK?