4

我将 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:002015/04/26 16:00:00之间?我认为它与 .startAt() 和 .endAt() 相关,但我不确定如何。

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

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

})

谢谢你的建议。

4

1 回答 1

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

于 2015-04-21T16:37:32.577 回答