2017-02-23 61 views
0
"vehicles" : { 
      "-KbwlIGLm6dxffPJoJJB" : {    
      "fuel" : "petrol", 
      "groups" : { 
       "-KdWh_9KVF16efcSdrji" : true, 
       "-Kdb1G720MDgbuR3nPBL" : true 
      }, 
      "make" : "Honda", 
      "model" : "City", 
      "name" : "Honda City",    
      "speed_limit" : 100, 
      "tank_size" : 32, 
      "type" : "car" 
      }, 
      "-KdU-BlfEdqzKxFjGI3D" : {    
      "fuel" : "petrol", 
      "groups" : { 
       "-KdWh_9KVF16efcSdrji" : true 
      }, 
      "make" : "yamaha", 
      "model" : "FZ", 
      "name" : "Yamaza FZ",    
      "speed_limit" : 60, 
      "tank_size" : 12, 
      "type" : "bike" 
      }   
     } 

我想檢索結果,其中groups-KdWh_9KVF16efcSdrji,且密鑰必須等於true。如何根據布爾值查詢Firebase?

vehicles_ref.child("groups").orderByChild("-KdWh_9KVF16efcSdrji").equalTo(true).on 
("value", function (snapshot) { 
    console.log(snapshot.val()); 
}); 

但是目前我得到NULL爲上述標準。

我已經改變查詢

vehicles_ref.orderByChild("/groups/-KdWh_9KVF16efcSdrji").equalTo(true).on("value", function (snapshot) { 
    console.log(snapshot.val()); 
}); 

現在取得成果,但現在越來越警告

火力警告:使用未指定索引。考慮加入「.indexOn」:‘羣/ -KdWh_9KVF16efcSdrji’在/車輛安全規則獲得更好的性能

如何添加索引以消除此警告?

+0

你試圖把車輛進行分類。雖然您可以爲其添加索引,但這意味着您需要爲每個類別添加一個新索引。相反,看看我的答案在這裏爲更好的方式建模類別:http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value –

+0

我們正在運行一個帶有此警告的大型系統。我們做得很好。這不是一個錯誤。 –

回答

0

我也有過這樣的警告,我發送了Firebase,並且在查詢查找具有相同ID的項目的查詢中過濾查詢。警告信息「.indexOn」是指在數據庫中的規則,這應該加入「.indexOn」你正在試圖將項目中的排序組進行檢查。

{ 

    "scores": { 

    "bruhathkayosaurus" : 55, 
    "lambeosaurus" : 21, 
    "linhenykus" : 80, 
    "pterodactyl" : 93, 
    "stegosaurus" : 5, 
    "triceratops" : 22 
     } 
} 

因爲恐龍的名字只是關鍵。 我們可以添加一個.value的規則,我們的節點/分,以優化我們的查詢:

{ 

    "rules": { 

    "scores": { 
     ".indexOn": ".value" 
     } 
     } 
} 

您可以使用下面的鏈接: https://firebase.google.com/docs/database/security/indexing-data?hl=es-419