2015-11-11 91 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

我可能應該說,日誌將顯示在網頁上,我的壞。爲了能夠使用相同的遊標,我將不得不在基於文檔支持的個別請求之間存儲/序列化它。我錯過了什麼? –