2017-10-20 4 views
0

ich habe eine Datenbank Firebase wie folgt:bekommen alle Kinder eines bestimmten Kind einmal mit Firebase Web

enter image description here

i eine zufällige Anweisung wählen müssen. Aufgrund der Schwierigkeiten bei der Auswahl eines zufälligen Datensatzes basierend auf "Push" -Tasten der Firebase (basierend auf anderen SO-Antworten) habe ich einen numerischen Schlüssel "n: 1" usw. erstellt, so dass ich basierend auf einer Zufallszahl anrufen kann. Hier ist mein Code zum Abrufen einer zufälligen Anweisung:

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

PROBLEM: Ich bekomme eine 'Null' Antwort auf meine Suche. Hauptfrage: Wie kann ich alle Kinder eines bestimmten Kindes in Firebase Web bekommen? SECONDARY FRAGE (verwandt): Warum macht Firebase mich (die Ressource hungrig) "OrderByChild", wenn ich genau den Datensatz, den ich abrufen möchte, weiß?

dank

+0

Haben Sie mehrere Knoten mit Kindern namens 'data'? Denn genau danach sucht der Code. Wenn Sie den gewünschten Knoten kennen, müssen Sie 'orderByChild()' nicht verwenden - referenzieren Sie ihn direkt wie 'firebase.database.ref ('data/n:' + randomIndex)' –

+0

Danke Jen. plus nützlich zu wissen, dass es nicht nötig ist, 'orderByChild()' zu verwenden – user2206361

Antwort

0

andere Für eine Antwort suchen, Lösung arbeiten, dass die Beratung basiert:

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

dank Jen oben.

Verwandte Themen