4

レコードに created_date フィールドがある場合、手動で開始日と終了日を計算して追加することなく、7 日以内に作成されたすべてのレコードを取得する簡単な方法はありますか?

4

2 に答える 2

3

NOW()Mongo には、クライアントで使用してサーバーで評価できるSQL のようなシンボリックな日付はありません。

問題を解決する最善の方法は、クライアントで日付を評価することです。特定のケースでは、レコードは将来作成されないため、クライアントで「現在マイナス 7 日」を計算し、その日付をクエリに入れるだけでよいでしょう。

余談ですが、サーバーから正確な日付が必要な場合は、次のように取得できます。

db.eval( function() { return new Date() } ); 

$evalほとんどのドライバーを使用すると、コマンドを使用してそれを達成できるはずです。

最後に、式を使用してサーバー上でこれを完全に実行できますwhere()。ただし、この方法はお勧めしません。このようなクエリはインデックスを利用できないため、コレクション内のすべてのレコードを逆シリアル化する必要があります。あなたのコレクションが小さい場合を除き、それらは非常に遅いです。ただし、このアプローチを採用したい場合は、式new Date()に JavaScript で を使用できますwhere()

于 2013-07-17T03:30:07.703 に答える
3

mongo コンソールで次のようなことを試して、過去 7 日間に作成されたレコードを返します (created_date が挿入日であると仮定します)。

> startDate = new Date()  // Current date
> startDate.setDate(startDate.getDate()-7) // Subtract 7 days
> startDate.setHours(0)   // Set the hour, minute and second components to 0
> startDate.setMinutes(0)
> startDate.setSeconds(0)
> db.mycollection.find({created_date:{$gte: startDate}})

かなりの数行のコードですが、少なくとも日付演算を行う必要はありません。

于 2013-07-17T04:21:28.643 に答える