36

過去 24 時間以内に作成されたドキュメントのみを検索するようにクエリを制限したいと考えています。

このクエリを構成する最良の方法は何ですか? 日付に基づいて制限するにはどうすればよいですか?

4

10 に答える 10

45

createdAtフィールドを追加してインデックスを作成し、クエリを実行する

db.getCollection("COLLECTION_NAME").find({"createdAt":{$gt:new Date(Date.now() - 24*60*60 * 1000)}})

これにより、86400 秒より古いすべてのレコードが返されます。

于 2015-10-27T05:25:14.430 に答える
20

他のインデックスを使用しておらず、デフォルトの ObjectID を _id として使用している場合は、次の操作を実行できます。

var ObjectID = require('mongodb').ObjectID

db.collection.find({
  _id: {
    $gt: ObjectID.createFromTime(Date.now() / 1000 - 24*60*60)
  }
}, callback)
于 2012-11-10T00:45:21.213 に答える
14

Google経由でここに着陸する他の人は、次のようにmongoシェルでこれを行うことができます:

db.collection.find({ $where: function () { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000)  }  })
于 2013-12-13T17:12:37.057 に答える
3

まず第一に、あなたのコレクションのスキーマを人々に提供していただけると本当に助かります。

しかし、すでに3時間が経過し、誰も返信しなかったという理由だけで、私は試してみます:

エントリがあり、ISODate であるフィールド createdAt があるとします。

{
somefield: "test",
createdAt: ISODate("2012-08-13T04:00:00Z")
}

だからあなたがする必要があるのは、このフィールドにインデックスを置くことです

db.yourColl.ensureIndex({createdAt:1});

次に、node.js で現在の時刻を取得し、24 時間に置き換えて開始値を取得します。(私が知る限り、mongdb には NOW の類似物はありません。私が間違っている場合は、誰かを正してください。)

db.yourColl.find({
   createdAt: {
     $gte: start
   }
});
于 2012-11-09T23:36:34.313 に答える
-1

私は同じ問題を抱えていましたが、多くの検索を行った後、過去X日間からデータを取得するために見つけた最良の解決策は次のようなものです:

let date_obj = new Date();
let requestedTime = new Date(new Date().setDate(date_obj.getDate() - day));
    
    db.collection.find({
      createdAt: {$gt: requestedTime}
    });

day 変数は、必要な日数の数値である必要があります。たとえば、1 日前 (過去 24 時間) の場合は 1、2 日前 (過去 48 時間) の場合は 2、先月の場合は 30、月の場合は 60 です。過去2か月など。..

let date_obj = new Date();
let requestedTime = new Date(new Date().setDate(date_obj.getDate() - 1));

document.querySelector("#current_date").innerHTML = `current date: ${date_obj}`
document.querySelector("#last_24H_date").innerHTML = `last 24 hours: ${requestedTime}`
<div id="current_date"></div>
<div id="last_24H_date"></div>

于 2021-05-24T10:33:59.227 に答える