在iOS Firebase SDK

时间:2016-03-03 17:44:26

标签: ios firebase firebase-realtime-database

我正在制作一个集成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/

的数据

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

高度*高度+长度*长度> 100(仅举例)

如果可能,我该如何使用iOS Firebase SDK执行此操作?

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

1 个答案:

答案 0 :(得分:2)

(请注意,问题已更改,因此我之前提供的答案是正确的,对于新问题不再有效)

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

然而,有很多方法可以解决这个问题,因为你使用的是iOS,所以很容易:

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

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

哦,看到这篇文章

Filter and sort on multiple values with Firebase

对于在原始问题中发布的等式:height * 2 + 10> 100

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

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

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

CELERYD_CONCURRENCY = 1

您可以通过添加.queryEndingAtValue进一步缩小搜索结果范围,然后为您提供一系列高度

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