我将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)
})
你的建议。
答案 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