Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查询Firebase中是否存在子数组?_Firebase - Fatal编程技术网

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

如何查询Firebase中是否存在子数组?,firebase,Firebase,各位网友好, 目前我正在使用Firebase,并尝试查询以下结构: items 1 - name: "Car" - Children - 2 - 3 2 - name: "Wheels" 3 - name: "Engine" 您可以从这个示例中看到,我有一个ID为1、2和3的项数组。1还有自己的子数组,称为Children,它由ids2和id3组成 我如何进行一个firebase查询,只提取具有名为children的数组的

各位网友好,

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

items
  1
    - name: "Car"
    - Children
      - 2
      - 3
  2 
    - name: "Wheels"
  3 
    - name: "Engine"
您可以从这个示例中看到,我有一个ID为1、2和3的项数组。1还有自己的子数组,称为Children,它由ids2和id3组成

我如何进行一个firebase查询,只提取具有名为children的数组的ID

起初,我认为下面的方法会奏效:

<my firebase path>.child('items').orderByChild('Children').once('value', function(snap){
    // ... No results :(
});
不走运。接下来,我尝试向Id 1添加一个名为haschilds=true的属性,然后像这样进行查询

<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.ForEachfunctiondata时。。。然后再看data.val.Children,这只是一个空白结果,这让我很困惑,因为我认为Firebase收回了所有子节点。因此,需要将数据展平

我如何获得这些孩子的价值观

**更新**Plunker已添加

看起来这是一部错误喜剧

1在简单示例中,1、2和3是有序的,因此firebase将其视为一个数组。在现实世界中,这些数字更为随机,因此firebase将它们视为对象,因为它们没有顺序。 2由于某种原因,Intellij没有显示子对象的内容。我必须键入类似data.val.Children['3']的内容才能在data.val.Children中获取值或类似于forvar的属性来迭代字段。奇怪的
3我还是做不到。child'items'.orderByChild'Children'。。。因为它会返回所有记录。但奇怪的是,它首先返回有子对象的快照。

在回调中返回另一个快照。因此,与其尝试访问数据[“子对象”],您必须使用data.val.Children。

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

如果通过完整的URL使用RESTful数据结构进行查询,会发生什么https://blistering-inferno-9999.firebaseio.com/items/1/children?@派-o-pah I接收一个数组,我可以使用snap.forEach对其进行迭代,因此直接访问它们可以很好地工作。在带有注释//的行中,您不应该获取该范围内的数据吗?i、 e.那里有回拨数据。我怀疑您没有定义,因为您的回调不在forEach范围内。@pie-o-pah是的,这是一个糟糕的例子。远离的。你可以看到我对发生的事情的解释,现在还不清楚你的目标是什么。您的plunker中的代码正在运行。如果您不愿意添加hasChildren标志,那么是的,简单地使用OrderByChildren'Children'将不起作用。我最好的建议是将数据展平,因为这是Firebase的最佳实践。代码发布。我使用Intellij,所以它甚至在我的IDE调试器中返回一个空数组。我不是很确定。我用您的代码和数据结构创建了一个plunker,它运行良好。你能用你所有的代码创建一个plunker吗。在更新部分添加一些附加说明。