从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,也可以按_id
sorting。 详情请看这里 。 当然,即使这样也只是最后一秒。
你可以诉诸“写两遍”。 一次写入主集合,再次写入“最后更新”集合。 如果没有交易,这将不会是完美的,但只有一个项目在“最后更新”的集合,它总是会很快。
这会给你一个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]]);