4

日付でmongoコレクションを照会したい。例:

var startDate = new Date(dateNow.getUTCFullYear(),dateNow.getUTCMonth(),dateNow.getUTCDate(),dateNow.getUTCHours(),0);
    var endDate = new Date(dateNow.getUTCFullYear(),dateNow.getUTCMonth(),dateNow.getUTCDate(),dateNow.getUTCHours()+1,0);

query.timeRegistered = { '$gte' : startDate, '$lt' : endDate };

... make mongo query ... 

しかし、うまくいきません。これは、mongo が日付オブジェクトを ISODate 形式で保存するためだと思います。mongo が Date を ISODate に変換するため、このクエリはシェルから機能しますが、javascript (node.js) からは機能しません。考えられるすべての解決策を試しましたが、どちらも役に立ちませんでした。

誰かが何か解決策を持っているなら、私は非常に感謝しています....

4

1 に答える 1

0

デフォルトでは、Mongo の日付操作は UTC であることに注意してください。たとえば、2015 年 6 月 22 日午後 7 時 10 分に「 t1」コレクションにレコードを入力しました。ただし、シェルでは、その値が 'ISODate("2015-06-22T 13:40 :08.545Z")'として表示され、 5:30時間遅れています。JavaScript コード (ブラウザーで実行されるため、ブラウザーのタイムゾーンを使用します) から、UTC タイムゾーンに従って開始日と終了日の変数を作成してから、レコードをクエリします。機能しない場合はお知らせください。シンプルにするために、非常に大きな日付範囲を指定して、機能するかどうかを確認してください。私は JS の専門家ではないので、日付を調整して UTC にする必要があると思います。

ただし、以下のようにMongoクライアントで試してみたところ、うまくいったので、適切なタイムゾーンで日付を渡す限り、JSからもうまくいくはずです。


db.t1.find({dt:{$gt:ISODate("2015-06-22T13:40:00.000Z"),$lt:ISODate("2015-06-22T13:41:00.000Z")} })
于 2015-06-22T13:54:32.503 に答える