【发布时间】:2017-03-10 04:16:52
【问题描述】:
我通过 REST API 使用 Firebase。我有以下数据库结构:
{
"categories" : {
"Cat1" : {},
"Cat2" : {},
"Cat3" : {},
"Cat4" : {}
},
"items" : {
"item1" : {
"categories": ["Cat1", "Cat3"]
},
"item2" : {
"categories": ["Cat1", "Cat3"]
},
"item3" : {
"categories": ["Cat1", "Cat2", "Cat3"]
},
"item4" : {
"categories": ["Cat4"]
}
}
}
如您所见,类别和项目之间存在“N N”类型的关系(一个类别可能有多个项目,一个项目可能属于多个类别)。
现在我想通过 Firebase REST API 获取 Cat1 的所有项目,但我做不到。
我们知道数组存储在 Firebase 中,类似于带有完整索引的地图:
"categories": {
"0": "Cat1",
"1": "Cat2",
"2": "Cat3",
}
所以,我在实时数据库规则中添加了".indexOn": ["categories/*"] 并尝试调用它:curl 'https://...firebaseio.com/...json?orderBy="categories/*"&equalTo="Cat1"'
但我只得到了这个:{ }
所以,我认为正则表达式在 Firebase 查询中不起作用,因为它在实时数据库规则中起作用:".indexOn": ["categories/0"] 和curl 'https://...firebaseio.com/...json?orderBy="categories/0"&equalTo="Cat1"'
当然,我可以将数据库模型更改为这样的:
{
"categories" : {
"Cat1" : {},
"Cat2" : {},
"Cat3" : {},
"Cat4" : {}
},
"items" : {
"item1" : {},
"item2" : {},
"item3" : {},
"item4" : {}
},
"category-items": {
"Cat1": ["item1", "item2", "item3"],
"Cat2": ["item3"],
"Cat3": ["item1", "item2", "item3"]
"Cat4": ["item4"]
}
}
并获取category-items 并遍历Cat1 数组,但是我必须调用REST API 读取方法太多次(该类别中的每个item 调用一个REST API)。所以,太贵了。
那么,谁能帮我获取原始数据库模型中某个类别中的所有项目?
更新
最终模型是:
{
"categories" : {
"Cat1" : {},
"Cat2" : {},
"Cat3" : {},
"Cat4" : {}
},
"items" : {
"item1" : {
"Cat1": true,
"Cat3": true,
},
"item2" : {
"Cat1": true,
"Cat3": true,
},
"item3" : {
"Cat1": true,
"Cat2": true,
"Cat3": true,
},
"item4" : {
"Cat4": true
}
}
}
我也加了
{
rules": {
...
"items": {
".indexOn": [ "Cat1", "Cat2", "Cat3", "Cat4" ]
}
}
}
实时数据库规则,REST API 调用是curl 'https://...firebaseio.com/items.json?orderBy="Cat1"&equalTo=true'
感谢弗拉基米尔·加布里扬
【问题讨论】:
标签: firebase firebase-realtime-database