2017-10-20 84 views
0

我有一個火力點數據庫如下特定子項的所有兒童:得到一次使用火力地堡網絡

enter image description here

我需要選擇一個隨機的聲明。由於難以選擇基於firebase「推」鍵的隨機記錄(基於其他SO答案),我創建了一個數字鍵「n:1」等,所以我可以基於隨機數進行調用。這裏是我的代碼來檢索一個隨機語句:

 function getStatement() { 
     var ref= firebase.database().ref('/totNumState/'); 
     ref.once('value').then(function(snapshot) { 
      var max = (snapshot.val()); 
      var randomIndex = Math.floor(Math.random() * max) + 1; 
      var rootRef = firebase.database().ref(); 
      rootRef.orderByChild('data').equalTo('n:'+randomIndex).once("value") 

       .then(function(snapshot) { 
       console.log(snapshot.val()); 
       }); 
     }, function(error){console.error(error)}); 
    } 

問題:我得到一個'空'的迴應我的搜索。 主要問題:我如何才能在firebase網站中獲得特定孩子的所有孩子? 二級問題(相關):當我知道我想要檢索的記錄時,爲什麼firebase讓我使用(資源餓了)'orderByChild'?

感謝

+0

你有多個名爲'data'的子節點嗎?因爲這就是代碼正在尋找的東西。如果你知道你想要的特定節點,你不必使用'orderByChild()' - 直接引用它就像'firebase.database.ref('data/n:'+ randomIndex)' –

+0

謝謝你。加上有用的知道它不需要使用'orderByChild()' – user2206361

回答

0

對於其他人尋找一個答案,工作解決方案基於這樣的建議是:

function getStatement() { 
     var ref= firebase.database().ref('/totNumState/'); 
     ref.once('value').then(function(snapshot) { 
      var max = (snapshot.val()); 
      var randomIndex = Math.floor(Math.random() * max) + 1; 

      var st = firebase.database().ref('data/n:'+randomIndex) 
      st.once("value") 
       .then(function(snapshot) { 
       console.log(snapshot.val().statement); 
       }); 
     }, function(error){console.error(error)}); 
    } 

由於上述仁。