根据时间戳从MongoDB集合中获取文档

时间:2018-03-19 09:32:16

标签: 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分钟将数据输入集合。使用在epoch时间的created_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输入的集合中获取条目。

我也愿意接受关于使用纪元时间是否是最佳方式的建议。

1 个答案:

答案 0 :(得分:1)

使用纪元时间确实是一个很好的方法。

由于您在几秒钟内进行存储,因此每个圆周时间可以被3600(以小时为单位)整除,而不会有余数。您可以使用此属性查找文档。

db.collection.find({created_at: {$mod: [ 3600, 0 ]}});

根据$mod文档,它会,

  

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

我们将除数设为3600,余数设为0。这应该是你期望的。

忽略秒:

对于这种情况,mod(epoch, 3600)应该小于59.可以使用mongo 3.6的$expr形成此查询

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

希望这有帮助!