我有一个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输入的集合中获取条目。
我也愿意接受关于使用纪元时间是否是最佳方式的建议。
答案 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]}});
希望这有帮助!