如何在Firebase中查询子数组的存在?

时间:2015-08-29 19:21:20

标签: firebase

Hello Internet Denizens,

我目前正在使用Firebase,并且正在尝试查询以下结构:

items
  1
    - name: "Car"
    - Children
      - 2
      - 3
  2 
    - name: "Wheels"
  3 
    - name: "Engine"

从这个例子可以看出,我有一系列项目,其ID为1,2,& 3.1也有自己的子阵列叫做儿童,它由Ids 2和I组成。 3.

我如何创建一个firebase查询,仅查询具有名为children的数组的ID?

起初,我认为以下内容可行:

<my firebase path>.child('items').orderByChild('Children').once('value', function(snap){
    // ... No results :(
});

没有运气。接下来,我尝试将名为hasChildren = true的属性添加到Id为1,然后像这样查询。

<my firebase path>.child('items').orderByChild('hasChildren').equalTo(true).once('value', function(snap){
    // ... iterate over results, which in this case is the Id 1
});

但是,当我执行snap.ForEach(函数(数据)...然后查看data.val()。孩子们,它只是一个空白的结果,这让我感到困惑,因为我认为Firebase拉了支持所有子节点。因此,需要压缩数据。

我如何获得这些儿童价值观?

**更新** Plunker已添加

http://plnkr.co/edit/9U0ujEwdKi7sgQGmd6IE?p=preview

看起来这是一部错误的喜剧。

1)在简单的例子中,1,2和&amp; 3是有序的,因此firebase将其视为一个数组。在现实世界中,这些数字更加随机,因此firebase将它们视为一个对象,因为它们没有被排序。

2)由于某种原因,Intellij没有显示Children对象的内容。我必须输入类似data.val()的东西。孩子[&#39; 3&#39;]得到一个值或类似的东西(data.val(。。Children中的var属性)来迭代字段。奇怪的。

3)我 STILL 不能做.child(&#39; items&#39;)。orderByChild(&#39; Children&#39;)...因为那样会返回所有记录。然而,奇怪的是,它会返回那些首先拥有儿童的那些。

2 个答案:

答案 0 :(得分:0)

DataSnapshot.forEach返回回调中的另一个快照。因此,您必须使用data['Children']

,而不是尝试访问data.val().Children

答案 1 :(得分:0)

看起来修改我的数据结构是最好的方法,因为此时检查是否存在数组对象。