Usar findOne en mongodb para obtener elemento con id. Máximo

Estoy tratando de recuperar un elemento de una colección mongo, la que tiene el campo _id más grande. Sé que esto se puede hacer preguntando:

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

Pero parece algo poco elegante y me preguntaba si hay una forma de obtener ese elemento específico usando findOne ()

Nota: Quiero hacer esto porque, por lo que he leído en ObjectId , los primeros bytes corresponden a los milisegundos desde Epoch y, por lo tanto, el último elemento que se inserta tendrá el _id más grande. ¿Hay alguna otra manera de recuperar el último elemento insertado en una colección?

Debería usar find , como ya lo es, y no agregación, que será más lenta ya que necesita escanear todos los valores de los campos _id para calcular el máximo.

Como los comentarios señalaron, no hay diferencia entre usar find () y findOne () – funcionalmente o elegancia. De hecho, findOne en el shell (y en los controladores que lo implementan) se define en términos de find (con límite -1 y con letra bonita en el shell).

Si realmente quieres hacer el equivalente de

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

como findOne puedes hacerlo con esta syntax:

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

Puede obtener max _id usando la agregación de mongodb. Encontrar y ordenar puede sobrepasar.

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

con el controlador de PHP (mongodb)
utilizando 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);