现在我正在开发一个公交车跟踪程序,我在其中使用mongodb存储静态公交车时刻表,除了时间表,我还可以收到实时公交车到达和离开事件,事件流包括到达/出发时间,当前站和下一站。但是事件流并没有告诉我总线编号,这使得直接跟踪总线变得棘手。但是我知道公交车应该按照时间表的时间和地点,我可以使用时间表来引导公交车号码,最后跟踪公交车。
我的mongodb数据库存储了总线的时间表,架构是 {busNumber:'019191',时间表:[{'station':'station 1','time':'9:20'},{'station':'station 2','time':'9:30' },................]}。
我的实时活动有到达/离开时间,当前站和下一站。
但问题是如何使用mongodb和mongoose查询数组,我当前的查询是查找该站的时间表,
Schedule.findOne({'timeline.station ': current_station}, function(err, sche) {
然后循环遍历,发现公交车正好在那个时刻和地点
schedule.time.forEach(function(t) {
if (t.time== currenttime && t.station == currentstation) {
thing = t;
}
});
我想必须有一种方法可以通过查询和没有丑陋的循环来做到这一点,所以我可以查询找到时间和地点等于当前情况的数组元素,而且下一个数组元素的站点也等于实时总线事件中的next_station
答案 0 :(得分:0)
Schedule.findOne({ 'timeline.station': current_station, 'timeline.time' : current_time }, function(err, sche) { .... );
此外,为了处理前后时间的偏差,请在时间范围内进行查询和设计。通过使用$ gt,$ gte,$ lt和$ lte,您可以指定要查询的时间范围(对于cookie-cutter解决方案,请查看使用Mongo的日期类型)。 Query-operators