Odpowiedzi:
Sortowanie w Mongoose ewoluowało w kolejnych wersjach, tak że niektóre z tych odpowiedzi nie są już aktualne. Począwszy od wersji 4.1.x Mongoose, sortowanie malejące na date
polu można wykonać na jeden z następujących sposobów:
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) { ... });
Dla rodzaju rosnącej, pomijać -
przedrostek wersji ciąg lub użyj wartości 1
, asc
lub ascending
.
find
metodę w dokumentacji. Zobacz Model.find
.
Module#property
notacji i szukali #find
. Wygląda na to, że nie ma łatwego sposobu nawigacji lub wyszukiwania dokumentów. Wyszukiwanie find daje 187 wyników.
_id
pola. Na przykład, aby uzyskać najnowszy rekord, możesz:await db.collection.findOne().sort({ _id: -1 });
Poprawna odpowiedź to:
Blah.find({}).sort({date: -1}).execFind(function(err,docs){
});
Miałem do czynienia z tym problemem dzisiaj, używając Mongoose 3.5 (.2) i żadna z odpowiedzi nie pomogła mi w rozwiązaniu tego problemu. Poniższy fragment kodu załatwia sprawę
Post.find().sort('-posted').find(function (err, posts) {
// user posts array
});
Możesz wysłać dowolne standardowe parametry, których potrzebujesz find()
(np. Klauzule gdzie i pola zwrotne), ale bez wywołania zwrotnego. Bez wywołania zwrotnego zwraca obiekt Query, na którym tworzysz łańcuch sort()
. Musisz zadzwonić find()
ponownie (z większą liczbą parametrów lub bez - ze względu na wydajność nie powinno to być potrzebne), co pozwoli Ci uzyskać wynik ustawiony w wywołaniu zwrotnym.
Post.find().sort({date:-1}, function(err, posts){
});
Powinien również działać
EDYTOWAĆ:
Możesz również spróbować tego użyć, jeśli pojawi się błąd 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){});
Krótkie rozwiązanie:
const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }
Room.find(query, projection, options).exec(function(err, docs) { ... });
Sprawdź, czy to pomoże> Jak sortować według mangusty?
Przeczytaj także> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order
Możesz także sortować według _id
pola. Na przykład, aby uzyskać najnowszy rekord, możesz
const mostRecentRecord = await db.collection.findOne().sort({ _id: -1 });
Jest to również znacznie szybsze, ponieważ jestem bardziej niż skłonny założyć się, że twoje date
pole nie jest indeksowane.
Query#find([criteria], [callback])
. Pomyślałem, że może istniał jakiś tajny uścisk dłoni, który mówi, że „kryteria” mogą mieć maksymalnie trzy argumenty, ale wyświetla typ jako „Obiekt”.