在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);