2017-05-23 78 views
0

我在Web應用程序中使用Firebase和AngularFire4。該模型相對簡單,但我在尋找正確的設計方法時遇到了麻煩。設計firebase數據庫過濾

我有兩個類別:placescountries像下面這樣:

地方

"places" : { 
    "-Kjx7NhHnyZNIZbxvzx4" : { 
     "name" : "Dereck beer", 
     "type" : "Bar" 
     "location" : { 
      "cityName" : "Kagoshima", 
      "country" : { 
      "code" : "JP", 
      "id" : 110, 
      "name" : "Japan" 
      }, 
      "streetName" : "892-0842 Higashisen" 
     }, 
     "modifiedOn": 121211321321 
    } 
    //... More data here... 
    } 

國家

"countries" : { 
    "110" : { 
      "code" : "JP", 
      "id" : 110, 
      "name" : "Japan" 
      } 
    } 

目前在Web應用程序,我展示我可以導航到詳細信息vi每個地方的新聞。我還可以顯示地點所屬的國家(我創建了國家/地區集合中的新條目,如果尚未存在,則在創建/更新新地點時)。

但是我想過濾一些屬性的地方,例如類型。我試着用下面的查詢,從AngularFire docs,但它不工作:

constructor(private db: AngularFireDatabase) { 
    var query = { 
     orderByChild: 'modifiedOn', 
     equalTo: { 
      value: 'Bar', 
      key: 'type' } 
     }; 

     this.db.list("/places", query).subscribe(data => { 
       //All places are returned, and not only the one of type = "Bar" 
     }); 
} 

如果可能的話,我想,以避免this approach和過度複製我的收藏只是爲了能夠對它們進行查詢。

+0

這將是很好有一個原因的反對票,使人們能夠避免錯誤(如果有的話)下一個問題。有時,某些對某些人來說可能「顯而易見」的問題在面對直接問題時可能並不那麼明顯,在開發解決方案時細節會變得「隱藏」。 – Francesco

+1

是啊..沒有評論downvote是粗魯的,特別是如果誰要求超過1000名聲譽 – faruk

回答

0

應該

var query = { 
    orderByChild: 'type', 
    equalTo: 'Bar' 
}; 

orderByChildequalTo是火力一對,這是從SQL查詢不同

+0

我會試試看,謝謝。無論我想執行一個查詢並按照creationDate排序,使用:orderByChild:'modifiedOn'。根據angularFire文檔,使用可選的鍵/值屬性應該是有效的。 – Francesco

+0

嗨法魯克,我試過了,但我仍然收回整個結果(沒有過濾),我想排序數據在服務器端,而不是在客戶端。我將不得不更深入地瞭解我猜測的文檔。 – Francesco