Firebase查询孙子/多级查询

时间:2015-05-11 16:13:38

标签: firebase

从我读过的所有内容来看,似乎无法查询多级值。 我的数据结构如下所示:

{
"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);
    });

有些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());
        })
    });

1 个答案:

答案 0 :(得分:6)

2016年1月编辑:自此回答以来,Firebase具有深层查询,因此您可以查询超过1个级别。

查询只能是1级深度。有许多解决方案,但是平整您的数据和链接/引用是一种选择。

在上面的示例中,您可以创建另一个节点,将用户名(父级)链接到他们添加的恐龙(子级)。然后可以读取John节点并立即知道他添加了哪些恐龙。然后能够访问有关该dino的其他相关数据;添加日期,出现,身高等。

users
  John
     bruhathkayosaurus
     Styracosaurus
     Lambeosaurus
     Spinosaurus
  Peter
     Lambeosaurus
     Seismosaurus

您可能想要使用uid而不是名字,但是你明白了。

此外,还不清楚为什么列出的示例中存在元节点,因此可以将其展平:

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