使用Firebase .startAt()和.endAt()查询日期范围的方法

时间:2015-04-21 11:11:47

标签: angularjs firebase firebase-realtime-database geofire

我将firebase与GeoFire结合使用,效果很好,但我还需要一个查询,我不知道应该怎么做。

这是我的GeoFire / Firebase查询:

var geoFire = new GeoFire(ref.child("geoFire"));

var geoQuery = geoFire.query({
    center: [51.315077, 3.73261],
    radius: 100 //kilometers
})

geoQuery.on("key_entered", function(key, location, distance) {

    ref.child("articles").child(key).on("value", function(snap){

        var x = snap.val()
        DATA.push(x)

    })

})

这是我在firebase中的json数据库:

geoFire

-JmE05U-Wbr5LGRSh0Z8
-JmE0COUFBRPZIBqwfYN

articles

-JmE05U-Wbr5LGRSh0Z8
   * ...
   * articlePostDate: 2015/04/26 08:00:00
   * ...
-JmE0COUFBRPZIBqwfYN
   * ...
   * articlePostDate: 2015/04/26 12:00:00
   * ...
-JmE0Iq7-uvrk5Tg_K8_
   * ...
   * articlePostDate: 2015/01/26 08:00:00
   * ...
-JmE0MrnstNv9d_8ozQ4
   * ...
   * articlePostDate: 2015/04/26 15:00:00
   * ...

以上GeoFire / Firebase查询返回2篇文章(但可能是100多篇文章),这是正确的。

我的问题:

如何扩展下面的Firebase查询,以便我可以根据一系列的articlePostDates获取记录?例如,所有GeoFire返回的记录的发布日期介于 2015/04/26 07:00:00 2015/04/26 16:00:00 之间?我认为它是.startAt()和.endAt(),但我不确定如何。

ref.child("articles").child(key).on("value", function(snap){

    var x = snap.val()
    DATA.push(x)

})

你的建议。

1 个答案:

答案 0 :(得分:2)

在使用startAt()或endAt()之前,您需要使用orederByChild()订购列表。

尝试以下代码(起点包括在内)。

ref.child("articles")
.orderByChild('articlePostDate')
.startAt('2015/04/26 07:00:00').endAt('2015/04/26 16:00:00')
.on("value", function(snap){
    var x = snap.val()
    DATA.push(x)
})

有关详细信息,请参阅Firebase Query.startAt