【发布时间】:2016-02-12 15:40:53
【问题描述】:
我想通过 Fluentd 将来自 Docker 的日志存储到 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 呢?这里的正确方法是什么?
【问题讨论】:
标签: javascript mongodb pagination docker fluentd