从MongoDB收集中获取最新的logging

我想知道集合中最近的logging。 怎么做?

注意:我知道以下命令行查询的工作原理:

1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson); 2. db.test.find().skip(db.test.count()-1).forEach(printjson) 

idate添加了时间戳。

问题是收集数据的时间越来越长,我的“testing”集合真的非常巨大。 我需要一个持续时间响应的查询。

如果有更好的mongodb命令行查询,请让我知道。

这是以前答案的重复,但更有可能在不同的mongodb版本上工作。

 db.collection.find().limit(1).sort({$natural:-1}) 

我需要一个持续时间响应的查询

默认情况下,MongoDB中的索引是B-Trees。 searchB树是一个O(logN)操作,所以即使find({_id:...})也不会提供常量时间,O(1)响应。

这表明,如果您使用ObjectId为您的ID,也可以按_idsorting。 详情请看这里 。 当然,即使这样也只是最后一秒。

你可以诉诸“写两遍”。 一次写入主集合,再次写入“最后更新”集合。 如果没有交易,这将不会是完美的,但只有一个项目在“最后更新”的集合,它总是会很快。

这会给你一个collection最后一个文件

 db.collectionName.findOne({}, {sort:{$natural:-1}}) 

$natural:-1表示与插入logging的顺序相反的顺序。

编辑 :对于所有downvoters,上面是一个Mongoose语法,mongo CLI语法是: db.collectionName.find({}).sort({$natural:-1}).limit(1)

php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);