Docker从MongoDBlogging日志

我想通过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文档说:

ObjectId值的顺序与生成时间之间的关系在一秒之内并不严格。

这似乎是一个问题 – 如果我试图find_id低于lastIdFromPreviousPage所有文档,则不能保证在一秒之内文档按照它们被编写的顺序sorting。 即使已经显示在前一页上,前一页中的某些日志也可能包含在结果中。

在MySQL中,如果您通过auto_increment字段来sorting结果,则可以保证结果的顺序是正确的,但是MongoDB呢? 这里的正确方法是什么?

光标为您抽象分页工作。 查看使用批处理的示例文档 ,或从光标连续读取文档 。

Interesting Posts