在mongodb中使用findOne获取最大id的元素

我试图从mongo集合中检索一个元素,这个元素是最大的_id字段。 我知道这可以通过查询来完成:

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

但它有点不雅观,我想知道是否有办法使用findOne()来获取特定元素

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

你应该使用find ,就像你已经是,而不是聚合,这将是较慢的,因为它需要扫描_id字段的所有值来找出最大值。

正如评论所指出的那样,使用find()和findOne()(function上或优雅上) 没有区别。 事实上,在shell中(以及在实现它的驱动程序中) findOne是通过find(限制-1和在shell中具有漂亮的打印)来定义的。

如果你真的想做相同的事情

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

作为findOne你可以用这个语法来做到这一点:

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

您可以使用mongodb的聚合获得最大_id。 查找和sorting可能矫枉过正。

 db.myCollection.aggregate({ $group: { _id: '', last: { $max: "$_id" } } }); 

用PHP驱动(mongodb)
使用findOne()

 $filter=[]; $options = ['sort' => ['_id' => -1]]; // -1 is for DESC $result = $collection->findOne(filter, $options); $maxAge = $result['age'] 
 $maxId=""; $Cursor =$collection->find(); foreach($cursor as $document) { $maxid =max($arr=(array($document['id']))); } print_r($maxid+1);