Zeb*_*Zeb 4 ios firebase swift firebase-realtime-database
我正在尝试使用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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于一个家庭,我想选择那个家庭的所有产品.我的第一个解决方案是访问系列,检索ID数组,然后执行请求(每个ID一个).它有效,但这种方法可能会导致大量请求.有没有更好的方法来获得它?例如,我正在尝试这个,但它不起作用:
ref.child("products").queryOrderedByChild("family").queryEqualToValue("0", childKey: "family").observeSingleEventOfType(.Value, withBlock: { snap in
print("snap \(snap)")
})
Run Code Online (Sandbox Code Playgroud)
但它始终打印Snap (products) <null>
.
UPDATE
我可以使用此查询访问给定系列的产品:
ref.child("products").queryOrderedByChild("family").queryEqualToValue(0).observeSingleEventOfType
Run Code Online (Sandbox Code Playgroud)
顺便说一句,现在我在运行测试时收到此警告:
[FirebaseDatabase]使用未指定的索引.考虑在/ products中添加".indexOn":"family"到您的安全规则以获得更好的性能
在此先感谢您的帮助!
那这个呢:
ref.queryOrderedByChild("family").queryEqualToValue(0).observeSingleEventOfType(.Value, with: { snap in
print("snap \(snap)")
})
Run Code Online (Sandbox Code Playgroud)
有关更新问题的更新:
将其添加到firebase控制台中的数据库规则中(另请参见屏幕截图).别忘了点击"发布"按钮:
"products": {
".indexOn": "family"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1215 次 |
最近记录: |