Docker从MongoDB中记录检索

时间:2015-11-11 14:14:16

标签: javascript mongodb pagination docker fluentd

我想将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呢?这里的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

光标为您提取分页工作。查看the docs以获取使用批处理的示例,或者只是从光标连续读取。