En Mongoose, ¿cómo ordeno la fecha? (node.js)
Pregunta
Digamos que ejecuto esta consulta en Mongoose:
Room.find({}, function(err,docs){
}).sort({date:-1});
¡Esto no funciona!
Solución
Clasificación En Mongoose ha evolucionado sobre las versiones de manera que algunas de estas respuestas ya no son válidas. A partir de la 4.1.x Liberación de Mongoose, un tipo descendente en el date
el campo se puede hacer de cualquiera de las siguientes maneras:
Room.find({}).sort('-date').exec(function(err, docs) { ... });
Room.find({}).sort({date: -1}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'desc'}).exec(function(err, docs) { ... });
Room.find({}).sort({date: 'descending'}).exec(function(err, docs) { ... });
Room.find({}).sort([['date', -1]]).exec(function(err, docs) { ... });
Room.find({}, null, {sort: '-date'}, function(err, docs) { ... });
Room.find({}, null, {sort: {date: -1}}, function(err, docs) { ... });
Para un tipo ascendente, omita el -
prefijo en la versión de cadena o use valores de 1
, asc
, o ascending
.
Otros consejos
La respuesta correcta es:
Blah.find({}).sort({date: -1}).execFind(function(err,docs){
});
He estado lidiando con este problema hoy usando Mongoose 3.5 (.2) y ninguna de las respuestas me ayudó a resolver este problema. El siguiente fragmento de código hace el truco
Post.find().sort('-posted').find(function (err, posts) {
// user posts array
});
Puede enviar cualquier parámetros estándar que necesite find()
(por ejemplo, donde las cláusulas y los campos de retorno) pero no llamar de vuelta. Sin una devolución de llamada devuelve un objeto de consulta que cadena sort()
en. Necesitas llamar find()
Nuevamente (con o sin más parámetros, no debe necesitar ninguno por razones de eficiencia) que le permitirá obtener el resultado establecido en su devolución de llamada.
Hago esto:
Data.find( { $query: { user: req.user }, $orderby: { dateAdded: -1 } } function ( results ) {
...
})
Esto mostrará las cosas más recientes primero.
Post.find().sort({date:-1}, function(err, posts){
});
Debería funcionar también
EDITAR:
También puede intentar usar esto si recibe el error sort() only takes 1 Argument
:
Post.find({}, {
'_id': 0, // select keys to return here
}, {sort: '-date'}, function(err, posts) {
// use it here
});
Vea si esto ayuda> ¿Cómo ordenar en Mongoose?
También lee esto> http://www.mongodb.org/display/docs/sorting+and+natural+order
Solución corta:
const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }
Room.find(query, projection, options).exec(function(err, docs) { ... });