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;)...因为那样会返回所有记录。然而,奇怪的是,它会返回那些首先拥有儿童的那些。
答案 0 :(得分:0)
DataSnapshot.forEach返回回调中的另一个快照。因此,您必须使用data['Children']
。
data.val().Children
答案 1 :(得分:0)
看起来修改我的数据结构是最好的方法,因为此时检查是否存在数组对象。