0

現在、mongodb を使用して静的なバス スケジュールを保存するバス追跡プログラムに取り組んでいます。スケジュールに加えて、リアルタイムのバスの到着および出発イベントを受け取ることができます。イベント ストリームには到着/出発時刻が含まれています。現在の駅と次の駅。ただし、イベント ストリームではバス番号がわからないため、バスを直接追跡するのは困難です。しかし、スケジュールに従ってバスがいつどこにいるべきかを知っているので、スケジュールを使用してバス番号を誘導し、最終的にバスを追跡できます。

私の mongodb データベースにはバスのスケジュールが保存されています。スキーマは { busNumber:'019191', timeline:[{'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 に等しいタイムバスイベント

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 に答える