2016-04-27 144 views
1

我想要使用Firebase选择已启动但尚未结束的日历活动,或者未来6个月内启动的日历活动。Firebase AND查询

在伪SQL,正是我想要的是:

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

的问题是,我知道如何让这些用例之一,但不能同时:

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

如果我试图结合这两个,我得到以下错误:

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

我不想执行两个查询,以过滤列表下来。只有可能有几个匹配我想要的查询的结果,但可能有数百万个结果与它们自己的任一查询相匹配。

+0

密切相关:[查询基于多个其中火力子句](http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in -firebase)。你是否已经看过,如果你可以结合那里描述的'start'和'end'属性? –

+0

@FrankvanPuffelen问题是,我试图拉的事件可能已经开始,所以我不能使用'.startAt(start)',因为这会忽略任何已经开始的事情。我不想用两个查询来做到这一点,因为这两个查询都可能返回大量数据。返回在未来6个月内(或已经开始)开始的任何事情,都需要提取开始日期已经过去的每个事件。 –

回答

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

我不在特定范围内寻找消息。如果一个事件已经开始但尚未结束,调用'.startAt(startTime)'会将其过滤掉。这不是我想要的。 –