2016-12-01 130 views
0

我的Angular2應用程序中包含一組標記的Firebase圖像列表。我正在尋找一種方法,以「Tag1」返回所有圖像。這可能使用sort_by函數嗎?過濾基於嵌套數組的Firebase對象

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

請看看這可能會幫助你http://stackoverflow.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

回答

3

現在你需要坐下來思考這個,爲什麼?其原因是,你在前面的一個火力點問題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

謝謝你。在我的情況下,它將<10個元素。然而,「Tag1」可以在任何鍵(0,1 ... n)中。 正如上面的手動過濾工作,但可能不是明智的? (res => res.filter(r => r。subElements.indexOf(「Tag1」)> -1)).subscribe(result => console.log(result)) – user3642173

+0

我的回答更新,閱讀並告訴我你的想法! ;) –

+0

謝謝你! – user3642173

相關問題