consultas complejas comandos mongodb

comandos - consultas complejas mongodb



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

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 sintaxis:

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