Firebase查询子代/多级查询

Firebase查询子代/多级查询,firebase,Firebase,从我所读到的一切来看,似乎不可能查询多级值。 我的数据结构如下所示: { "dinosaurs": { "bruhathkayosaurus": { "meta":{ "addedBy":"John", "addedDate":"02021987" }, "appeared": -70000000, "height": 25 }, "lambeosaurus":

从我所读到的一切来看,似乎不可能查询多级值。 我的数据结构如下所示:

{
"dinosaurs": {
    "bruhathkayosaurus": {
        "meta":{
            "addedBy":"John",
            "addedDate":"02021987"
        },
        "appeared": -70000000,
        "height": 25
    },
    "lambeosaurus": {
        "meta":{
            "addedBy":"Peter",
            "addedDate":"12041987"
        },
        "appeared": -76000000,
        "height": 2.1
    }
}
}
在不知道恐龙的关键名称的情况下,是否仍然可以查询仅检索John添加的项的元节点

在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级深度。有很多解决方案,但可以选择平坦化数据和链接/引用

在上面的示例中,您可以创建另一个节点,将用户名(父节点)链接到他们添加的恐龙(子节点)。然后约翰·诺德可以被阅读,并立即知道他补充了哪些恐龙。然后能够访问该恐龙的其他相关数据;添加日期、出现日期、高度等

users
  John
     bruhathkayosaurus
     Styracosaurus
     Lambeosaurus
     Spinosaurus
  Peter
     Lambeosaurus
     Seismosaurus
你可能想用uid代替名字,但你明白了

此外,还不清楚为什么在所列示例中有一个元节点,因此可以将其展平:

"dinosaurs": {
    "bruhathkayosaurus": {
       "addedBy":"John"
       "addedDate":"02021987"
       "appeared": -70000000
       "height": 25
    }, 

小心:当你在上有<代码>时,你应该总是考虑相应的<代码>关闭>代码>。对于s上的顶级
,它可以是“当页面/应用程序关闭时”,但您在添加的
child\u
回调中的
on
将随着时间的推移导致侦听器的增加。解决此问题的常用方法是在循环中使用
一次
,但这通常也会导致性能不理想。另请参见:请将编辑置于顶部。