powiedzmy, że uruchamiam to zapytanie w Mongoose:
Room.find({}, function(err,docs){
}).sort({date:-1});
To nie działa!
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
.
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”.find
metodę w dokumentacji. ZobaczModel.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:
źródło
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ę
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ńcuchsort()
. 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.źródło
Robię to:
To pokaże najnowsze rzeczy jako pierwsze.
źródło
$orderby
jest przestarzały w MongoDB 3.2, więc nie powinien być już używany.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
:źródło
Error: sort() only takes 1 Argument
Post.find({}, {'_id': 0}).sort("-date").function(err, posts){});
Krótkie rozwiązanie:
źródło
Sprawdź, czy to pomoże> Jak sortować według mangusty?
Przeczytaj także> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order
źródło
Możesz także sortować według
_id
pola. Na przykład, aby uzyskać najnowszy rekord, możeszJest to również znacznie szybsze, ponieważ jestem bardziej niż skłonny założyć się, że twoje
date
pole nie jest indeksowane.źródło