【发布时间】:2016-10-05 13:20:28
【问题描述】:
我正在尝试使用 Firebase 设置一个新项目,但我正在努力使用非关系数据库和查询系统。我已阅读指南,尤其是有关数据结构的指南。 这是我的用例:我必须处理一些产品,每个产品都有一个名字和一个家庭,这个也是一个实体。 我创建了下面的结构,试图遵循指南和示例。
{
"families" : [ {
"name" : "easy",
"products" : [ 10, 11 ]
}, {
"name" : "ir33",
"products" : [ 12, 13 ]
} ],
"products" : {
"10" : {
"family" : 0,
"name" : "Matita"
},
"11" : {
"family" : 0,
"name" : "Penna"
},
"12" : {
"family" : 1,
"name" : "Gomma"
}
}
}
给定一个家庭,我想选择那个家庭的所有产品。 我的第一个解决方案是访问家庭,检索 ID 数组,然后执行请求(每个 ID 一个)。它有效,但这种方法可能会导致大量请求。 有没有更好的方法来获得它?例如,我正在尝试使用这个,但它不起作用:
ref.child("products").queryOrderedByChild("family").queryEqualToValue("0", childKey: "family").observeSingleEventOfType(.Value, withBlock: { snap in
print("snap \(snap)")
})
但它总是打印Snap (products) <null>。
更新
我可以通过这个查询访问给定系列的产品:
ref.child("products").queryOrderedByChild("family").queryEqualToValue(0).observeSingleEventOfType
顺便说一句,现在我在运行测试时收到此警告:
[FirebaseDatabase] 使用未指定的索引。考虑将 /products 中的 ".indexOn": "family" 添加到您的安全规则中以获得更好的性能
提前感谢您的帮助!
【问题讨论】:
-
你能试着去掉queryEqualToValue中“0”的引号吗?我认为现在您正在将字符串与数字进行比较,这就是您没有得到任何结果的原因。
-
忽略它,它只是一个建议警告。
-
嗨@AndréKool,我已经尝试过了,但这还不够。我用新版本的查询更新了我的答案。
-
嗨@Dravidian,我知道这只是一个警告,但我也不喜欢它们!
标签: ios swift firebase firebase-realtime-database