Respostas:
A classificação no Mongoose evoluiu ao longo dos lançamentos, de modo que algumas dessas respostas não são mais válidas. A partir da versão 4.1.x do Mongoose, uma classificação decrescente no date
campo pode ser feita das seguintes maneiras:
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 um tipo ascendente, omitir o -
prefixo nos valores versão string ou uso de 1
, asc
ou ascending
.
find
método errado nos documentos. Veja Model.find
.
Module#property
notação e procurei #find
. Parece que não há uma maneira fácil de navegar ou pesquisar os documentos. A busca por localização produz 187 resultados.
_id
campo. Por exemplo, para obter o registro mais recente, você pode:await db.collection.findOne().sort({ _id: -1 });
A resposta correta é:
Blah.find({}).sort({date: -1}).execFind(function(err,docs){
});
Hoje lidei com esse problema usando o Mongoose 3.5 (.2) e nenhuma das respostas me ajudou a resolver esse problema. O seguinte trecho de código faz o truque
Post.find().sort('-posted').find(function (err, posts) {
// user posts array
});
Você pode enviar qualquer parâmetro padrão necessário find()
(por exemplo, cláusulas where e campos de retorno), mas sem retorno de chamada. Sem retorno de chamada, ele retorna um objeto Query no qual você encadeia sort()
. É necessário ligar find()
novamente (com ou sem mais parâmetros - não deve ser necessário por motivos de eficiência), o que permitirá obter o conjunto de resultados no retorno de chamada.
Post.find().sort({date:-1}, function(err, posts){
});
Deve funcionar também
EDITAR:
Você também pode tentar usar isso se receber o erro sort() only takes 1 Argument
:
Post.find({}, {
'_id': 0, // select keys to return here
}, {sort: '-date'}, function(err, posts) {
// use it here
});
Error: sort() only takes 1 Argument
Post.find({}, {'_id': 0}).sort("-date").function(err, posts){});
Solução curta:
const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }
Room.find(query, projection, options).exec(function(err, docs) { ... });
Veja se isso ajuda> Como classificar em mangusto?
Leia também> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order
Você também pode classificar por _id
campo. Por exemplo, para obter o registro mais recente, você pode fazer,
const mostRecentRecord = await db.collection.findOne().sort({ _id: -1 });
É muito mais rápido também, porque estou mais do que disposto a apostar que seu date
campo não está indexado.
Query#find([criteria], [callback])
. Eu pensei que talvez houvesse algum aperto de mão secreto que diz que "critérios" podem ter até três argumentos, mas lista o tipo como "Objeto".