2016-12-20 7 views
1

Ich weiß, dass es gibt 1000 Antworten auf diese Frage, die teilweise ist, warum ich so verwirrt bin durch die Tatsache, dass ich es nicht zur Arbeit bekommen kann.Firebase (Web) kann OrderByChild nicht zur Arbeit

Ich kann die OrderByChild Query/Filter nicht funktionieren. Ich habe mindestens 25 Tutorials sah, Anleitungen und Artikel online, die es erklären und sie alle scheinen zu sagen, genau das zu tun, was ich tue:

var dbRef = firebase.database().ref(); 
var filterExperience = dbRef.child("Users").orderByChild('trade_general').equalTo('Construction'); 

filterExperience.on('child_added', snap => { 

    // Just trying to figure out if anything's even happening 
    console.log("Test" + snap.val());  

    // Set Card ID  
    $('#cand-card').attr('id', 'cand-card' + snap.key); 

    // Set Name 
    $('#fullname').attr('id', 'fullname' + snap.key); 
      $('#fullname' + snap.key).text(snap.child("Personal").child("first_name").val() + " " + snap.child("Personal").child("last_name").val()); 

// And so on... 

Und für das Protokoll, ist Feuerbasis alle Set richtig auf. Ich habe den Ausschnitt am Ende meiner HTML-Seite und ich habe gelesen/geschrieben Datensätze ohne Problem.

Meine Datenbank sieht wie folgt aus:

Users 
| 
|--KYQ0L5TStcZM1rgVpte 
    | 
    |-Account 
    |-Availability 
    |-Education 
    |-Location 
    |-Work_History 
     | 
     |-Recent_Job_1 
     | 
     |-employer_name: "abc company" 
     |-job_position: "concrete finisher" 
     |-trade_general: "Construction" 

Das Ergebnis, das ich erhalte ist: absolut nichts. Nichts in der Konsole von diesem Test, den ich direkt nach dem "Snap" ausgeführt habe. Nichts auf der Seite.

+1

In Ihrem JSON gibt es keine Eigenschaft mit dem Namen 'trade_general'. –

+0

Mein schlechtes. Es ist dort in Firebase, nur vergessen, es hier zu kopieren. Ich hatte lange Zeit versucht, Anfragen zu bekommen, um mit numerischen startAt & endAt's zu arbeiten, und hatte das gerade aufgegeben, um zu sehen, ob ich etwas (scheinbar) einfacheres zum Arbeiten bekommen könnte; wie equalTo. So war "job_years" in meinem Kopf die relevante Information für diese Frage. –

Antwort

0

Firebase-Datenbankabfragen berücksichtigen jedes untergeordnete Element unter dem Standort, den Sie abfragen, und nehmen dann die untergeordneten + Bedingungen, die Sie angeben. Also, wenn der Pfad, den Sie tun können, festgelegt ist:

dbRef.child("Users") 
    .orderByChild('Work_History/Recent_Job_1/trade_general') 
    .equalTo('Construction') 

So betrachtet dies die Work_History/Recent_Job_1/trade_general für jeden Benutzer und auf dieser Grundlage Filter.

Aber am wahrscheinlichsten Recent_Job_1 ist ein dynamischer Pfad. In diesem Fall versuchen Sie, eine Eigenschaft in einem verschachtelten dynamischen Pfad abzufragen, was im Abfragemodell der Firebase-Datenbank nicht möglich ist. Firebase-Indizes sind im Wesentlichen Einzelwert-Maps und diese Art von Abfrage funktioniert nicht mit diesen.

Sie müssen eine andere Datenstruktur finden, um die gewünschte Abfrage zu ermöglichen.

Eine Möglichkeit dazu wäre, den letzten Wert als eine direkte Eigenschaft unter jedem Benutzer zu halten. Damit können Sie nach dem Trade-General-Wert des letzten Jobs filtern.

Alternativ können Sie eine andere Datenstruktur einrichten, die die Werte Benutzern und Jobs zuordnet. Z.B.

UsersJobTradeGenerals 
    KYQ0L5TStcZM1rgVpte 
    Construction 
     Recent_Job_1: true 
     Recent_Job_4: true 
    OtherTradeGeneral 
     Recent_Job_2: true 
     Recent_Job_3: true 
+0

PERFEKT! Vielen Dank für deine Hilfe. Die Abfrage funktioniert jetzt (recent_job_1 wird schließlich dynamisch generiert, ist aber in der Entwicklungsphase, so dass ich zumindest die Abfragen herausfinden kann). Nun werde ich meine Daten so umgruppieren, wie Sie es erwähnt haben. –

Verwandte Themen