MongoDB:只获取在过去24小时内创建的文档?

时间:2012-11-09 19:30:26

标签: mongodb

我想限制我正在制作的查询,只查看过去24小时内创建的文档。

构建此查询的最佳方法是什么?我如何根据日期进行限制?

10 个答案:

答案 0 :(得分:18)

添加createdAt字段,将其编入索引,然后查询

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

这将返回所有早于86400秒的记录。

答案 1 :(得分:17)

如果您没有使用任何其他索引,并且使用默认的ObjectID作为_id,则可以执行以下操作:

var ObjectID = require('mongodb').ObjectID

db.collection.find({
  _id: {
    $gt: ObjectID.createFromTime(Date.now() / 1000 - 24*60*60)
  }
}, callback)

答案 2 :(得分:8)

对于通过谷歌登陆此处的其他人,您可以在mongo shell中执行此操作,如下所示:

db.collection.find({ $where: function () { return Date.now() - this._id.getTimestamp() < (24 * 60 * 60 * 1000)  }  })

答案 3 :(得分:6)

在mongoose中使用

let ObjectId    = require('mongodb').ObjectID;

Property.find({
    _id: {
        $gt: ObjectId.createFromTime(Date.now() / 1000 - 24 * 60 * 60)
    }
}, (err, result) => {
    console.log(err || result);
});

答案 4 :(得分:3)

首先,如果你能为人们提供你收藏的模式,那将会非常有帮助。

但是因为它已经过了3个小时而且没有人回答我会尝试:

假设您有条目并且它有一个创建的字段,它是一个ISODate:

{
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
   }
});

答案 5 :(得分:1)

&#34; TIME&#34;是存储时间戳的字段

db.your_collection_name.find({"TIME":{'$lt': new Date(),'$gte':new Date(new Date().setDate(new Date().getDate()-1))}},{}).count();

答案 6 :(得分:0)

希望这对某人有帮助。我正在使用pymongo查询最近24小时的数据。就我而言,我必须将当前时间转换为BSON时间戳。

首先,我必须导入Bson时间戳:

from bson.timestamp import Timestamp

然后在搜索查询中,我执行了以下操作:

yesterday  = datetime.datetime.now() - datetime.timedelta(days=1)

findQuery = {
    "unix": {
        "$gte": Timestamp(int(yesterday.strftime("%s")),0)
     }
}

答案 7 :(得分:0)

我遇到了同样的问题,经过大量搜索,我找到的用于获取过去 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 小时),2 表示两天前(过去 48 小时),30 表示上个月,最近两个月 60,以此类推。 ..

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>

答案 8 :(得分:0)

extension=mysqli release schedule 开始,这将是新的 $dateDiff 聚合运算符的一个很好的用例:

Mongo 5.0

注意事项:

  • 基本上,我们// { "_id" : ObjectId("60c8f804fb832fe2f2011657") } db.collection.aggregate([ { $match: { $expr: { $lt: [{ $dateDiff: { startDate: "$_id", endDate: "$$NOW", unit: "hour" } }, 24 ]} }} ]) // { "_id" : ObjectId("60c8f804fb832fe2f2011657") } // if document created within the last 24 hours 处理的项目的创建日期(由其 $match 表示)和现在($dateDiff }) 小于 (_id) 比 $$NOW $lt

  • 开始日期是 24 (ObjectId):

    • 确实,hours 包含其创建的时间戳
    • 并且 $_id 可以接受 ObjectId 作为时间表示
  • 结束日期为 $$NOW,这是一个返回当前日期时间值的变量。

答案 9 :(得分:0)

db.video.find({"timestamp":{$lt: new Date(),$gte: new Date(new Date().setDate(new Date().getDate()-1))}})