2017-10-20 5 views
0

を使用して取得:特定の子のすべての子どもたちがかつて次のように私はfirebaseデータベースを持っているFirebaseウェブ

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)}); 
    } 

問題:私の検索では「null」という応答が表示されています。 メイン質問:firebase webで特定の子供の子供をすべて取得するにはどうすればいいですか? 二次質問(関連):私が検索したいレコードを正確に知っていると、Firebaseはなぜ(私のリソースが飢えている) 'orderByChild'を使うのですか?答えを探して他の人のために

おかげ

+0

'data'という名前の子ノードを複数持っていますか?これはコードが現在探しているものだからです。あなたが望む特定のノードを知っているなら 'orderByChild()'を使う必要はなく、 'firebase.database.ref( 'data/n:' + randomIndex)'のように直接参照するだけです。 –

+0

Jenに感謝します。 + 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)}); 
    } 

感謝。

関連する問題