在特定时间范围内获取文档的最佳方式MongoDB

时间:2017-05-24 10:39:29

标签: mongodb aggregation-framework isodate

我正在创建一个在每x分钟后运行的脚本,需要通过时间戳从MongoDB收集数据。

例如,如何将文档与在以下时间范围内具有时间戳的聚合匹配:

start_time = current_time - 60 min
end_time = start_time + 30 min

我需要获得保留在该时间范围内的所有文件。 MongoDB对象上有ISODate时间戳。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以在mongo shell中创建日期对象,如下所示:

db.getCollection('order').aggregate([
{
$match : { 
    start_time : {$gte :  new Date(ISODate().getTime() - 1000 * 60 * 60)},
    end_time : {$lte :  new Date(ISODate().getTime() + 1000 * 60 * 30)}
    }
}
...
])

您可以在聚合中使用此功能,也可以在常规查找查询中使用此功能。

注意我在没有测试的情况下写了这个,所以它可能有语法错误..

答案 1 :(得分:1)

db.collection.find({“createdAt”:{$ gt:new Date('2017-04-25')},“updatedAt”:{$ lt:new Date('2017-06-25') }})

updatedAt和createdAt是我在按时间戳设计架构时所采取的。你可以根据你的设计给出场地。

在这种情况下,查找查询会比聚合更好,因为不需要执行复杂的函数