No puedo encontrar ningún lugar donde se haya documentado esto. Por defecto, la operación find () obtendrá los registros desde el principio. ¿Cómo puedo obtener los últimos N registros en mongodb?
Editar: también quiero que el resultado devuelto esté ordenado de menos reciente a más reciente, no al revés.
Respuestas:
Si entiendo su pregunta, debe ordenar en orden ascendente.
Suponiendo que tiene algún campo de identificación o fecha llamado "x" que haría ...
.ordenar()
El 1 ordenará ascendente (más antiguo a más reciente) y -1 ordenará descendente (más nuevo a más antiguo).
Si usa el campo _id creado automáticamente , tiene una fecha incrustada ... así que puede usarlo para ordenar por ...
Eso devolverá todos sus documentos ordenados del más antiguo al más nuevo.
Orden natural
También puede usar un orden natural mencionado anteriormente ...
Nuevamente, usando 1 o -1 dependiendo del orden que desee.
Utilice .limit ()
Por último, es una buena práctica agregar un límite al hacer este tipo de consulta abierta para que pueda hacer cualquiera ...
o
fuente
item = 3; item.add(3).divide(3) == 2; item.divide(3).add(3) == 4;
Sin orden, ¿cuál sería el resultado? Estoy de acuerdo con usted en que este orden inverso no es intuitivo. Esto no es SQL, después de todo, debe seguir los paradigmas normales de OO.Los últimos N registros agregados, de menos recientes a más recientes, se pueden ver con esta consulta:
Si los quieres en el orden inverso:
Si instala Mongo-Hacker también puede usar:
Si se cansa de escribir estos comandos todo el tiempo, puede crear funciones personalizadas en su ~ / .mongorc.js. P.ej
luego de un shell de mongo simplemente escriba
last(N)
fuente
db.collection.find().reverse().limit(1)
me da el error... has no method reverse
Para obtener los últimos N registros, puede ejecutar la siguiente consulta:
si solo quieres un último registro:
Nota: en lugar de $ natural, puede usar una de las columnas de su colección.
fuente
se puede utilizar
sort()
,limit()
,skip()
para obtener la última N inicio de la grabación de cualquier valor omitidofuente
Puedes probar este método:
Obtenga el número total de registros en la colección con
Luego usa skip:
fuente
Mire en Consulta: Clasificación y orden natural, http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order , así como sort () en Métodos de cursor http://www.mongodb.org/display / DOCS / Consultas avanzadas +
fuente
No puede "omitir" en función del tamaño de la colección, ya que no tendrá en cuenta las condiciones de consulta.
La solución correcta es ordenar desde el punto final deseado, limitar el tamaño del conjunto de resultados y luego ajustar el orden de los resultados si es necesario.
Aquí hay un ejemplo, basado en código del mundo real.
fuente
var query = collection.find( { conditions } ).sort({$natural : -1}).reverse().limit(N)
.@ bin-chen,
Puede usar una agregación para las últimas n entradas de un subconjunto de documentos en una colección. Aquí hay un ejemplo simplificado sin agrupación (que estaría haciendo entre las etapas 4 y 5 en este caso).
Esto devuelve las últimas 20 entradas (basadas en un campo llamado "marca de tiempo"), ordenadas de forma ascendente. Luego, proyecta cada documento _id, marca de tiempo y lo que sea_campo_que usted_quiere_para_ mostrar en los resultados.
entonces, el resultado se vería así:
Espero que esto ayude.
fuente
Ordenar, omitir, etc. puede ser bastante lento dependiendo del tamaño de su colección.
Se lograría un mejor rendimiento si tiene su colección indexada por algunos criterios; y luego podrías usar el cursor min ():
Primero, indexe su colección con
db.collectionName.setIndex( yourIndex )
Puede usar el orden ascendente o descendente, lo cual es genial, porque siempre desea los "N últimos elementos" ... así que si indexa en orden descendente es lo mismo que obtener los "primeros N elementos" .Luego, encuentra el primer elemento de su colección y utiliza sus valores de campo de índice como criterios mínimos en una búsqueda como:
Aquí está la referencia para el cursor min (): https://docs.mongodb.com/manual/reference/method/cursor.min/
fuente
db.collectionName.find().hint(yourIndex).limit(N)
Si el índice está en orden descendente, obtiene los N valores mínimos.Es posible que desee utilizar las
find
opciones: http://docs.meteor.com/api/collections.html#Mongo-Collection-findfuente
de acuerdo con la documentación de mongoDB :
fuente
use el operador $ slice para limitar los elementos de la matriz
donde la geolocalización es una matriz de datos, de eso obtenemos los últimos 5 registros.
fuente
La última función debería ser
sort
, nolimit
.Ejemplo:
fuente
sort
despuéslimit
?