Firebase查询孙子 /多级查询

  • 本文关键字:查询 多级 Firebase firebase
  • 更新时间 :
  • 英文 :


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

{
"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
    }, 

最新更新