2015-11-11 55 views
0

我想通过Fluentd将Docker中的日志存储到MongoDB中。 这个设置非常简单,但我正在努力的是如何从支持分页的正确顺序中检索MongoDB中的日志。从MongoDB检索Docker日志

日志文件的结构是

{ 
    _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值的顺序与代之间的关系 时间不严谨机智只需一秒钟。

这似乎是一个问题 - 如果我试图找到所有文档比lastIdFromPreviousPage_id,它不能保证在单个第二的文件在它们被写入的顺序排列。即使已经显示在前一页中,前一页中的某些日志可能会包含在结果中。

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

回答

1

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

+0

我可能应该说,日志将显示在网页上,我的坏。为了能够使用相同的游标,我将不得不在基于文档支持的个别请求之间存储/序列化它。我错过了什么? –