基于时间戳从MongoDB集合获取文档

基于时间戳从MongoDB集合获取文档,mongodb,epoch,Mongodb,Epoch,我有一个MongoDB集合,其中的文档如下所示 { "_id" : ObjectId("5aab91b2caa256021558f3d2"), "Timestamp" : "2017-11-16T14:43:07.5357785+01:00", "status" : 1, "created_at" : 1521193394, "updated_at" : 1521193394, "deleted_at" : "" } 数据每15分钟输入一次集合。

我有一个MongoDB集合,其中的文档如下所示

{
    "_id" : ObjectId("5aab91b2caa256021558f3d2"),
    "Timestamp" : "2017-11-16T14:43:07.5357785+01:00",
    "status" : 1,
    "created_at" : 1521193394,
    "updated_at" : 1521193394,
    "deleted_at" : ""
}
数据每15分钟输入一次集合。使用创建的_at字段(在大纪元时间内),我想找到一种在每小时顶部获取数据的方法。例如,在
12.00 12.15 12.30 12.45 13.00 13.15 13.30 13.45 14.00处输入数据

我想从12.00、13.00和14.00输入的集合中获取条目


我也愿意接受关于使用划时代时间是否是最好的方法的建议。

使用划时代时间确实是一个很好的方法

因为你是以秒为单位的,所以每一轮小时可以被3600整除(以小时为单位的秒),没有余数。您可以使用此属性查找文档

db.collection.find({created_at: {$mod: [ 3600, 0 ]}});
据文件记载,

选择字段值除以除数的文档 指定的余数

我们提供的除数为
3600
,余数为
0
。这应该给你期望的

忽略秒数:

对于这种情况,
mod(epoch,3600)
应小于59。此查询可以使用mongo 3.6的

db.collection.find({$expr: {$lte: [{ $mod: [ '$created_at', 3600 ] }, 59]}});

希望这有帮助

非常感谢@RaR,这帮了我很大的忙,但我的网站有点过度了。例如,即使条目是在12.00时输入的,也可能不完全是12.00.00,因为我们使用的是纪元时间,12.00.00将不同于12.00.05,因此这样做不会获取任何记录。关于如何查询12.00.*?@user3010617之类的内容,您有什么想法吗?可以使用mongo 3.6中提供的$expr进行查询。您使用的是哪个版本的mongodb?非常感谢@RaR,当我在集合中运行它时,它似乎工作得很好,我使用的是3.6.2版。只需要想办法把它翻译成jenssegers/laravel mongodb能做到的东西understand@user3010617只要注意到,条件应该是代码> $LTE < /代码>或<代码> $lt<代码>值60,直到第五十九秒,我们可以考虑为一个小时。更新了对
$lte