0

现在我正在做一个公交车跟踪程序,其中我使用mongodb存储静态公交车时刻表,除了时刻表,我还可以接收实时公交车到达和离开事件,事件流包括到达/离开时间,当前站和下一站。然而,事件流并没有告诉我公交车号,这使得直接跟踪公交车变得很棘手。但是因为我知道巴士应该在什么时间和地点根据时刻表,我可以使用时刻表来诱导公共汽车号码并最终跟踪公共汽车。

我的 mongodb 数据库存储了公交车的时刻表,架构是 { busNumber:'019191', timeline:[{'station':'station 1', 'time': '9:20' },{'station':'station 2', '时间': '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时间巴士事件

4

1 回答 1

0
Schedule.findOne({ 'timeline.station': current_station, 'timeline.time' : current_time }, function(err, sche) { .... );

此外,为了处理前后时间的偏差,请围绕时间框架进行查询和设计。通过使用 $gt、$gte、$lt 和 $lte,您可以指定要查询的时间范围(对于千篇一律的解决方案,请考虑使用 Mongo 的 Date 类型)。查询运算符

于 2013-07-30T20:35:06.690 回答