2015-01-12 23 views
13

Meine Daten Feuerbasis sieht wie folgt aus etwas:Firebase Abfrage nach Datumsbereich

{ 
    "lambeosaurus": { 
    "date" : 1420753443, 
    "length" : 12.5, 
    "weight": 5000 
    }, 
    "stegosaurus": { 
    "date" : 1429053443, 
    "length" : 9, 
    "weight" : 2500 
    } 
} 

ich nach einem Weg suchen, buchen mit einem benutzerdefinierten Zeitraum zu filtern. Ich habe einige Beispiele online gesehen, wo sie nach Datum gesucht haben, aber der Zeitstempel war immer der Schlüssel, der in meinem Fall nicht möglich ist.

Der entsprechende Abschnitt ist die Dokumentation finden Sie hier: https://www.firebase.com/docs/web/guide/retrieving-data.html#section-queries

wichtig es ist, dass Echtzeit-Aktualisierung noch unterstützt wird. Ich möchte auch nur die Anzahl aller Elemente bestimmen, die dem Kriterium entsprechen. Ich bin nicht am Datenpunkt für jeden Knoten interessiert.

Antwort

28

Sieht aus wie Sie die orderBychild() Methode können von Kind-Schlüssel oder Eigentum (das heißt weight, length oder date) bestellen. Und wenn Sie die Kette, die startAt() & endAt() verwenden, können wir die Abfrage konstruieren Sie suchen:

var startDate = 14200000000; 
var endDate = 14300000000; 

ref.orderByChild("date").startAt(startDate).endAt(endDate) 
    .on("child_added", function(snapshot){ 
    console.log("got the data!", snapshot); 
    }); 
+0

Gibt es eine Möglichkeit, die Anzahl der Male, um zu bestimmen, welche die „startat“ & ‚Endat‘ Kriterium entsprechen, aber ohne jeden einzelnen Artikel laden zu müssen. Durch den Wechsel von .on ('child_added') zu .on ('value') kann dies erreicht werden, aber dann synchronisiert es nicht mehr in Echtzeit. – Paul

+1

Kann dies auf GPS-Koordinaten erweitert werden? dh. Haben Sie eine 'startAt()' und 'endAt' für Längen- und Breitengrad? – Sauron

+0

hat es für jeden funktioniert? –