过滤基于嵌套数组的Firebase对象

过滤基于嵌套数组的Firebase对象

问题描述:

我的Angular2应用程序中包含一组标记的Firebase图像列表。我正在寻找一种方法,以“Tag1”返回所有图像。这可能使用sort_by函数吗?过滤基于嵌套数组的Firebase对象

let arrayOfElements = 
    [ 
     { 
      "name": "a", 
      "subElements": 
      [ 
      {0: "Tag1"}, 
      {1: "Tag2"} 
      ] 
     }, 
     { 
      "name": "a", 
      "subElements": 
      [ 
      {0: "Tag1"}, 
      {1: "Tag3"} 
      ] 
     } 
    ]; 
+0

请看看这可能会帮助你http://*.com/questions/40844795/how-to-get-a-specific-given-in-firebase/40845176#40845176 –

+0

只是替换.orderByChild( “name”) .equalTo(edittext.getText()。toString()); orderByChild(“0”)。equalTo(“Tag1”) –

+0

谢谢Tabish!但是,“Tag1”也可以具有id:2。在不知道我正在搜索的字典的关键字的情况下进行此搜索有没有可能? – user3642173

现在你需要坐下来思考这个,为什么?其原因是,你在前面的一个火力点问题tipical ....回答这个问题:

  • arrayOfElements可以是无限的?
  • arrayOfElements大小可以少于100(例如)?

为什么你需要回答这个问题?假设你有一个数组10.000项(或无限项)如果你使用orderByChild("0").equalTo("Tag1")这个firebase数据库需要读取所有项目才能找到项目有“Tag1”,那么你的应用/ web需要更多时间数据要得到这个查询的结果,那么这里我们需要开始谈论规范化firebase数据库和它的时间来创建索引,你可以看到我的昨天post,我解释它。

如果你在第二个问题的答案是YES 然后你可以使用这个命令来获取值orderByChild("0").equalTo("Tag1")因为数据消耗和浪费的时间是太低了前面其他情况下...你可以解决火力数据库规则这将indexOn() 。分析您的数据库并决定最佳选择。


更新

关于您的评论......如果你没有一个id或不需要火力唯一ID的最好形式要做到这一点,对我来说是这一个:

arrayOfElements{ 
    tag1:"true", 
    tag2:"true" 
} 

而只是获得键的价值。

让我知道,如果我已经帮助你,并编程好!

+0

谢谢你。在我的情况下,它将 res.filter(r => r。subElements.indexOf(“Tag1”)> -1)).subscribe(result => console.log(result)) – user3642173

+0

我的回答更新,阅读并告诉我你的想法! ;) –

+0

谢谢你! – user3642173