从我阅读的所有内容中,似乎无法查询多级值。我的数据结构看起来如下:
{
"dinosaurs": {
"bruhathkayosaurus": {
"meta":{
"addedBy":"John",
"addedDate":"02021987"
},
"appeared": -70000000,
"height": 25
},
"lambeosaurus": {
"meta":{
"addedBy":"Peter",
"addedDate":"12041987"
},
"appeared": -76000000,
"height": 2.1
}
}
}
不知道恐龙的关键名称,无论如何都可以查询元节点,仅检索约翰。
在JS中类似:
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta/addedBy")
.equalTo('Peter')
.on("child_added", function(snapshot) {
console.log(snapshot);
});
有黑客解决方案,但没有一个可扩展的解决方案,我应该将这些数据弄平吗?
编辑:
我需要代码审查...这是可以接受的解决方案吗?
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());
})
});
编辑2016年1月:自此答案以来,firebase具有深度查询,因此您可以比1级更深地查询。
查询只能是1级深。有许多解决方案,但可以选择数据并链接/引用。
在上面的示例中,您可以创建另一个将用户名(父)链接到恐龙(儿童)的节点。然后可以阅读约翰·诺德(John Node),并立即知道他添加了哪种恐龙。然后能够访问有关该恐龙的其他相关数据;添加日期,出现,高度等。
users
John
bruhathkayosaurus
Styracosaurus
Lambeosaurus
Spinosaurus
Peter
Lambeosaurus
Seismosaurus
您可能想使用UID而不是名称,但您会得到这个想法。
另外,尚不清楚为什么列出的示例中有一个元节点,因此可以这样将其扁平化:
"dinosaurs": {
"bruhathkayosaurus": {
"addedBy":"John"
"addedDate":"02021987"
"appeared": -70000000
"height": 25
},