2017-05-25 5 views
1

Ich habe folgende Datenbankstruktur in Firebase:Firebase Web spezifischere Daten abrufen und sortieren es

firebaseDB

Jedes Objekt enthält Kategorie und sectionIndex, die zu einem Kapitel und seine Sortierreihenfolge entsprechen.

Ich versuche, diese Daten zu greifen, um es in meinem Menü anzuzeigen.

ich an die DB mit diesem Code unter acces kann:

firebase.database().ref().on("value", snapshot => {console.log(snapshot.val());} ,error => {console.log("Error: " + error.code);});

Dort wird das Ergebnis in der Konsole ist:

consoleScreen

Meine Frage ist, wie kann ich in jedem eingeben Objekt (0,1,2,3,4, ..., 45), greifen Sie den Wert der Kategorie und sortieren Sie ihn in der Reihenfolge, die dem AbschnittIndex folgt, und vermeiden Sie, den Wert zu duplizieren.

Antwort

0

Firebase verfügt über eine Reihe von Abfragen, die in den Dokumenten beschrieben sind und mit denen Sie grundlegende Daten bearbeiten können. In Ihrem Fall sieht es so aus, als würden Sie orderByChild verwenden, um Ihr gesamtes Datenbankobjekt nach sectionIndex zu sortieren. Sie können dann mit den Parametern limitToFirst or limitToLast angeben, wie viele Werte Sie gleichzeitig erhalten möchten.

Dann, wenn Sie Ihren Schnappschuss bekommen, greifen Sie einfach alle categoryValues ​​und tun, was Sie wollen mit ihnen. Anstatt mit .on („value“) wie Sie sich gerade befinden, ist es wahrscheinlich einfacher zu bedienen .on (‚child_added‘) wie in ihrem Beispiel:

var ref = firebase.database().ref("dinosaurs"); 
    ref.orderByChild("height").on("child_added", function(snapshot) { 
    console.log(snapshot.key + " was " + snapshot.val().height + " m tall"); 
}); 

Es ist nicht zu schwer sein sollte, für den Sie anwenden das zu deinem Fall.

Denken Sie auch daran, dass je nachdem, was Sie sonst mit diesen Daten machen möchten und je nachdem, wie viele Elemente Sie haben, die Sortierung auf der Client-Seite einfacher ist (dh Firebase nicht zulassen) Führen Sie die Sortierung durch, damit Ihr Computer/Ihre App die Sortierung durchführt.