我试图从mongo集合中检索一个元素,即具有最大id字段的元素.我知道这可以通过查询:

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

但这似乎有点不公平,我想知道是否有办法使用findOne()获得特定元素

注意:我想这样做是因为,从我在ObjectId中读取的内容来看,第一个字节对应于自纪元以来的毫秒,因此,插入的最后一个元素将具有最大的_id.有没有其他方法来检索插入到集合中的最后一个元素?

推荐答案

你应该像现在一样使用find,而不是聚合,因为它需要扫描all个_id字段的值来计算最大值.

正如 comments 所指出的,在功能或优雅方面使用find()和findOne()有no个区别.事实上,shell中的findOne(以及实现它的驱动程序中的findOne)是根据find定义的(限制为-1,shell中有漂亮的print).

如果你想做相当于

db.collection.find().sort({_id:-1}).limit(1).pretty()

findOne所示,您可以使用以下语法:

db.collection.findOne({$query:{},$orderby:{_id:-1}})

Mongodb相关问答推荐

Spring Data MongoDB中的@ Transactions(+测试容器)

在对象mongodb的数组中查找元素

如何在 MongoDB 中的集合下查找同一文档

使用特定关键字和邻近度进行查询和过滤

按数组mongodb中的第一个元素排序

分组前的 MongoDb 聚合总数

Mongo:查找具有 0 个关联文档的文档,成本更低

在 mongodb 聚合中的阶段之后输出具有序列数字 id 的新集合

如何在mongoDB中按嵌套文档分组( group by )

如何在 2 个应用程序之间共享mongoose模型?

如何根据_id删除文档?

.save() 不是函数 Mongoose

Stripe:必须提供来源或客户

MongoDB 1.6.5:如何重命名集合中的字段

如何使用 MongoDB 建模 likes投票系统

如何在 MongoDB 的 $match 中使用聚合运算符(例如 $year 或 $dayOfMonth)?

我如何使用 Twitter 的流 api 中的推文并将它们存储在 mongodb 中

使用 Node.js 将许多记录插入 Mongodb 的正确方法

Meteor订阅不更新集合的排序顺序

MongoDb 聚合 $match 错误:Arguments must be aggregate pipeline operators