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