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呢? 这里的正确方法是什么?
光标为您抽象分页工作。 查看使用批处理的示例文档 ,或从光标连续读取文档 。