从我读过的所有内容来看,似乎无法查询多级值.我的数据结构如下所示:
{
"dinosaurs": {
"bruhathkayosaurus": {
"meta":{
"addedBy":"John",
"addedDate":"02021987"
},
"appeared": -70000000,
"height": 25
},
"lambeosaurus": {
"meta":{
"addedBy":"Peter",
"addedDate":"12041987"
},
"appeared": -76000000,
"height": 2.1
}
}
}
Run Code Online (Sandbox Code Playgroud)
在不知道恐龙的关键名称的情况下,无论如何都要查询元节点,仅检索由John添加的项目.
在JS中像:
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta/addedBy")
.equalTo('Peter')
.on("child_added", function(snapshot) {
console.log(snapshot);
});
Run Code Online (Sandbox Code Playgroud)
有一些hacky解决方案,但没有一个是可扩展的,我应该只是扁平化这些数据吗?
编辑:
我需要代码审查......这是一个可以接受的解决方案吗?
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta")
.on('child_added',function(snap1){
snap1.ref().orderByChild("addedBy")
.equalTo("Peter")
.on('child_added', function(snap2) {
console.log(snap2.val());
})
});
Run Code Online (Sandbox Code Playgroud)
编辑2016年1月:由于此答案,Firebase具有深度查询,因此您可以查询超过1个级别.
查询只能是1级深度.有许多解决方案,但是平整您的数据和链接/引用是一种选择.
在上面的示例中,您可以创建另一个节点,将用户名(父级)链接到他们添加的恐龙(子级).然后可以读取John节点并立即知道他添加了哪些恐龙.然后能够访问有关该dino的其他相关数据; 添加日期,出现,高度等
users
John
bruhathkayosaurus
Styracosaurus
Lambeosaurus
Spinosaurus
Peter
Lambeosaurus
Seismosaurus
Run Code Online (Sandbox Code Playgroud)
你可能想要使用uid而不是名字,但你明白了.
此外,还不清楚为什么列出的示例中存在元节点,因此可以将其展平:
"dinosaurs": {
"bruhathkayosaurus": {
"addedBy":"John"
"addedDate":"02021987"
"appeared": -70000000
"height": 25
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |