在 iOS Firebase SDK 上查询具有复杂条件的数据
Query data with complex condition on iOS Firebase SDK
我正在制作一个集成了 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
(请注意,问题已更改,因此我之前提供的正确答案对新问题不再有效)
新答案是否定的,不能同时直接查询两个值
但是,有很多方法可以解决这个问题,而且由于您使用的是 iOS,这很容易:
1) 查询所有恐龙以将它们加载到对象中并将它们存储在数组中 2) 制作一个 NSPredicate 来根据你的方程式提取一个数组
您真的应该考虑如何在 firebase 中为数据建模,因为如果您正确地对其进行建模,您将能够查询 Firebase 以获得您想要的内容,而不是在客户端处理它。
哦,看看这个post
对于原问题中 post 的等式:高度 * 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)
})