如何查询Firebase中是否存在子数组?
各位网友好, 目前我正在使用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的数组的
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吗。在更新部分添加一些附加说明。