2016-04-27 2 views
1

Ich möchte Firebase verwenden, um Kalenderereignisse auszuwählen, die entweder bereits begonnen haben, aber nicht beendet wurden oder die innerhalb der nächsten 6 Monate beginnen.Firebase UND Abfrage

In pseudo-SQL, was ich will ist:

WHERE `start` < {6 months from now} AND `end` > {now} 

Das Problem ist, ich weiß, wie eine dieser Anwendungsfälle zu bekommen, aber nicht beides:

firebase.orderByChild('start').endAt(+new Date() + 15724800000) 
firebase.orderByChild('end').startAt(+new Date()) 

Wenn ich versuche, die beide zu kombinieren, bekomme ich folgende Fehlermeldung:

Uncaught Error: Query.orderByChild: You can't combine multiple orderBy calls.

ich will nicht zwei Abfragen auszuführen, um zu filtern die Liste runter. Es wird wahrscheinlich nur ein paar Ergebnisse geben, die mit der Frage übereinstimmen, die ich möchte, aber es kann Millionen von Ergebnissen geben, die einer der Abfragen selbst entsprechen.

+0

Eng verwandt: [Abfrage basiert auf mehrere where-Klauseln in Feuerbasis] (http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in -firebase). Hast du schon geschaut, ob du die Eigenschaften "start" und "end" wie dort beschrieben kombinieren kannst? –

+0

@FrankvanPuffelen das Problem ist, dass die Ereignisse, die ich versuche zu ziehen, bereits begonnen haben, so dass ich '.startAt (start)' nicht verwenden kann, weil das alles ignorieren würde, was bereits begonnen hat. Ich möchte dies nicht mit zwei Abfragen tun, da beide Abfragen eine Menge Daten zurückgeben können. Wenn Sie alles zurückgeben, was in den nächsten 6 Monaten beginnt (oder bereits begonnen hat), müssen Sie jedes Ereignis ziehen, dessen Startdatum bereits verstrichen ist. –

Antwort

0

https://www.firebase.com/blog/2013-10-01-queries-part-one.html#between

firebase.orderByChild('start') 
.startAt(startTime) 
.endAt(endTime) 
.once('value', function(snap) { 
    console.log('messages in range', snap.val()); 
}); 
+0

Ich suche nicht nach Nachrichten in einem bestimmten Bereich. Wenn ein Ereignis bereits gestartet wurde, aber noch nicht beendet wurde, wird es durch Aufruf von '.startAt (startTime)' herausgefiltert. Das ist nicht was ich will. –