得到一次使用火力地堡网络

问题描述:

我有一个火力点数据库如下特定子项的所有儿童:得到一次使用火力地堡网络

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

对于其他人寻找一个答案,工作解决方案基于这样的建议是:

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

由于上述仁。