我想将Docker中的日志通过Fluentd存储到MongoDB中。 设置非常简单,但我正在努力解决的问题是如何以正确的顺序从MongoDB中检索日志并支持分页。
日志文档的结构是
{
_id: ObjectId(...),
time: ISODate(...),
log: "message"
}
日志应显示从最新到最旧,并支持分页。由于日志已按正确顺序到达 - 较旧的日志在较新的日志之前写入。我的方法是:
首页 - db.logs.find().sort({_id: -1}).limit(10)
并保存最后_id
个
下一页 - db.logs.find({_id: {$lt: lastIdFromPreviousPage).sort({_id: -1}).limit(10)
等
这里的问题是MongoDB docs说:
ObjectId值的顺序与生成之间的关系 时间在一秒钟内并不严格。
这似乎是一个问题 - 如果我尝试查找_id
低于lastIdFromPreviousPage
的所有文档,则无法保证在一秒钟内文档按照编写顺序排序。上一页的某些日志可能会包含在结果中,即使它们已经显示在上一页上。
在MySQL中,如果您按auto_increment
字段订购结果,则可以保证结果的顺序正确,但是MongoDB呢?这里的正确方法是什么?