我试图从mongo集合中检索一个元素,即具有最大id字段的元素.我知道这可以通过查询:
db.collection.find().sort({_id: -1}).limit(1)
但这似乎有点不公平,我想知道是否有办法使用findOne()获得特定元素
注意:我想这样做是因为,从我在ObjectId中读取的内容来看,第一个字节对应于自纪元以来的毫秒,因此,插入的最后一个元素将具有最大的_id.有没有其他方法来检索插入到集合中的最后一个元素?
我试图从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}})