Quiero saber el registro más reciente de una colección. ¿Como hacer eso?
Nota: sé que las siguientes consultas de línea de comando funcionan:
1. db.test.find().sort({"idate":-1}).limit(1).forEach(printjson);
2. db.test.find().skip(db.test.count()-1).forEach(printjson)
donde idate tiene la marca de tiempo agregada.
El problema es que más tiempo de recopilación es el momento de recuperar los datos y mi recopilación de "prueba" es realmente enorme. Necesito una consulta con respuesta en tiempo constante.
Si hay alguna consulta mejor en la línea de comandos de mongodb, hágamelo saber.
mongodb
mongodb-query
inkriti
fuente
fuente
db.collection.find().limit(1).sort({$natural:-1}).pretty()
si quieres que se vea biendb.collection.find().sort({$natural:-1}).limit(1).pretty()
Query failed with error code 303 and error message 'option $natural is not supported' on server docdb
. Ojalá esa característica llegue pronto.Esto le dará un último documento para una
collection
$natural:-1
significa orden opuesto al que se insertan los registros.Editar : Para todos los votantes negativos, arriba hay una sintaxis de Mongoose, la sintaxis de CLI de mongo es:
db.collectionName.find({}).sort({$natural:-1}).limit(1)
fuente
Por defecto, los índices en MongoDB son B-Trees. La búsqueda de un árbol B es una operación O (logN), por lo que incluso
find({_id:...})
no proporcionará respuestas O (1) de tiempo constante.Dicho esto, también puede ordenar por
_id
si está utilizandoObjectId
para sus ID. Consulte aquí para obtener más detalles . Por supuesto, incluso eso solo es bueno hasta el último segundo.Puede recurrir a "escribir dos veces". Escriba una vez en la colección principal y vuelva a escribir en una colección "actualizada por última vez". Sin transacciones esto no será perfecto, pero con un solo artículo en la colección "última actualización" siempre será rápido.
fuente
Otra forma más de obtener el último elemento de una colección MongoDB (no te preocupes por los ejemplos):
Proyección normal
Proyección ordenada (_id: orden inverso)
sort({'_id':-1})
, define una proyección en orden descendente de todos los documentos, en función de su_id
s.Proyección ordenada (_id: orden inverso): obtener el último (último) documento de una colección.
fuente
php7.1 mongoDB:
$data = $collection->findOne([],['sort' => ['_id' => -1],'projection' => ['_id' => 1]]);
fuente
Mi solución :
db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})
fuente
Si está utilizando identificadores de objeto Mongo generados automáticamente en su documento, contiene una marca de tiempo en los primeros 4 bytes con el último documento insertado en la colección. Entiendo que esta es una pregunta antigua, pero si alguien aún termina aquí buscando una alternativa más.
La consulta anterior daría el _id para el último documento insertado en la colección
fuente
Así es como se obtiene el último registro de todos los documentos MongoDB de la colección "foo" (cambie foo, x, y, etc.)
puedes agregar o quitar del grupo
artículos de ayuda: https://docs.mongodb.com/manual/reference/operator/aggregation/group/#pipe._S_group
https://docs.mongodb.com/manual/reference/operator/aggregation/last/
fuente