2017-02-06 2 views
0

Dies ist meine Datenstruktur in der DatenbankBestellanfragen von tiefen Pfaden mit einem variablen Schlüssel

"2017" : { 
    "metadata" : { 
     "February" : { 
     "-Kc3BF0V1iLgtnI65LuR" : { 
      "date" : "2017-02-04T13:36:38.311Z", 
      "price" : 80 
     }, 
     "-Kc3BF0V1xxfrtnI65OlS" : { 
      "date" : "2017-02-11T13:36:38.311Z", 
      "price" : 70 
     }, 
     "-Kc3BF0V1xxfrtnIOZozp" : { 
      "date" : "2017-02-03T13:36:38.311Z", 
      "price" : 90 
     } 
     }, 
     "January" : { 
     "-Kc3E5bpxpo3RpSHH3fn" : { 
      "date" : "2017-01-01T13:50:12.264Z", 
      "price" : 45 
     }, 
     ... 
     } 
    } 
    } 

ich diese Daten in einer Liste zeigt, die ich in meinem ionischen App wie so

February 
+ 2017-02-04 
+ 2017-02-11 
+ 2017-02-03 
January 
+ 2017-01-01 

Jetzt wollen die Daten unter den Monaten sortieren, so würden die Daten unter Februar

February 
+ 2017-02-03 
+ 2017-02-04 
+ 2017-02-11 

ich read in the firebase blog haben werden, dass sie habe eine Funktionalität hinzugefügt, die Sie Abfragen nach tiefen Pfaden bestellen können Aber ich kann nicht finden, wie Sie es abfragen können, wenn Sie einen dynamischen Schlüssel haben, in meinem Fall sind die Monate die dynamischen Schlüssel. Da jedes Kind der Monate nach Datum sortiert sein muss.

Ich Abrufen der Daten aus Feuerbasis mit diesem Snippet

var dbRef = firebase.database().ref(year + '/metadata/').orderByChild('date'); //How to order by date if my month is variable? 
return firebaseObject(dbRef); 

Ich habe auch versucht, in Winkel Bestellung des orderBy Filter verwenden, aber das wird nicht funktionieren, da es sich um ein Array sein muss. Ich habe ein blog gefunden, wo sie es in ein Array konvertieren, aber Sie werden den Schlüssel verlieren, und ich brauche das noch, weil die Liste klickbar ist, damit ich auf die Detailseite der Reise gehen kann. Ich denke auch nicht, dass das Sortieren am Frontend eine gute Idee ist.

Antwort

0

Firebase-Datenbankabfragen können nur einen dynamischen Pfad enthalten: das untergeordnete Element direkt unter dem Speicherort, an den Sie abfragen. Während orderByChild() einen Pfad zu der Eigenschaft nehmen kann, auf der die Daten angeordnet werden sollen, muss dieser Pfad statisch sein.

Dies bedeutet, dass, wenn Sie Metadaten über alle Monate nach dem Datum abfragen möchten, können Sie eine Liste der Metadaten über alle Monate behalten sollten:

"metadataList" : { 
    "-Kc3BF0V1iLgtnI65LuR" : { 
     "date" : "2017-02-04T13:36:38.311Z", 
     "price" : 80 
    }, 
    "-Kc3BF0V1xxfrtnI65OlS" : { 
     "date" : "2017-02-11T13:36:38.311Z", 
     "price" : 70 
    }, 
    "-Kc3BF0V1xxfrtnIOZozp" : { 
     "date" : "2017-02-03T13:36:38.311Z", 
     "price" : 90 
    } 
    "-Kc3E5bpxpo3RpSHH3fn" : { 
     "date" : "2017-01-01T13:50:12.264Z", 
     "price" : 45 
    }, 
    ... 
} 
+0

Aber mit dieser Datenstruktur werde ich nicht in der Lage sein, meine zu zeigen Liste in der Monatsansicht wie oben gezeigt. Gibt es keine andere Herangehensweise oder wie kann ich immer noch das erreichen, was ich noch möchte? – mXX

+0

Korrekt. Wenn Sie also diesen Anwendungsfall wünschen, sollten Sie * auch * eine Liste der Daten nach Monat aufbewahren. In NoSQL-Datenbanken duplizieren Sie häufig die Daten, um die Anwendungsfälle zu ermöglichen, die Ihre App benötigt. Ich empfehle, [NoSQL-Datenmodellierung] (https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/) zu lesen und [Firebase für SQL-Entwickler] zu beobachten (https://www.youtube .com/playlist? list = PL1-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s). –

Verwandte Themen