una - Obtenga el último registro de la colección mongodb
mongodb actualizar registro (6)
Necesito una consulta con respuesta de tiempo constante
Por defecto, los índices en MongoDB son B-Trees. La búsqueda de un B-Tree es una operación O (logN), por lo que incluso find({_id:...})
no proporcionará respuestas de tiempo constante, O (1).
Dicho eso, también puede ordenar por el _id
si está usando ObjectId
para sus ID. Mira aquí para 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 escriba nuevamente en una colección "actualizada por última vez". Sin transacciones, esto no será perfecto, pero con solo un elemento en la colección "última actualización" siempre será rápido.
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 más largo, la colección es el momento de recuperar los datos y mi colección de "pruebas" es realmente enorme. Necesito una consulta con respuesta de tiempo constante.
Si hay una mejor consulta de la línea de comando de mongodb, házmelo saber.
Esta es una repetición de la respuesta anterior, pero es más probable que funcione en diferentes versiones de mongodb.
db.collection.find().limit(1).sort({$natural:-1})
Esto le dará un último documento para una collection
db.collectionName.findOne({}, {sort:{$natural:-1}})
$natural:-1
significa orden opuesto al que se insertaron los registros.
Editar : Para todos los downvoters, arriba hay una sintaxis de Mongoose, la sintaxis de la CLI de mongo es: db.collectionName.find({}).sort({$natural:-1}).limit(1)
Mi solución :
db.collection("name of collection").find({}, {limit: 1}).sort({$natural: -1})
Si está utilizando Id. De Objetos de Mongo generados automáticamente en su documento, contiene la marca de tiempo como los primeros 4 bytes y puede encontrar el último documento insertado en la colección. Entiendo que esta es una vieja pregunta, pero si alguien todavía está aquí buscando una alternativa más.
db.collectionName.aggregate(
[{$group: {_id: null, latestDocId: { $max: "$_id"}}}, {$project: {_id: 0, latestDocId: 1}}])
La consulta anterior daría el _id para el último documento insertado en la colección
php7.1 mongoDB:
$data = $collection->findOne([],[''sort'' => [''_id'' => -1],''projection'' => [''_id'' => 1]]);