Mongoose で次のクエリを実行するとします。
Room.find({}, (err,docs) => {
}).sort({date:-1});
これはうまくいきません!
Mongoose での並べ替えは、これらの回答の一部が無効になるように、リリースごとに進化してきました。Mongoose の4.1.xリリースの時点で、date
フィールドの降順ソートは次のいずれかの方法で実行できます。
Room.find({}).sort('-date').exec((err, docs) => { ... });
Room.find({}).sort({date: -1}).exec((err, docs) => { ... });
Room.find({}).sort({date: 'desc'}).exec((err, docs) => { ... });
Room.find({}).sort({date: 'descending'}).exec((err, docs) => { ... });
Room.find({}).sort([['date', -1]]).exec((err, docs) => { ... });
Room.find({}, null, {sort: '-date'}, (err, docs) => { ... });
Room.find({}, null, {sort: {date: -1}}, (err, docs) => { ... });
昇順で並べ替えるには-
、文字列バージョンのプレフィックスを省略するか1
、 、asc
、またはの値を使用しますascending
。
正解は次のとおりです。
Blah.find({}).sort({date: -1}).execFind(function(err,docs){
});
今日、Mongoose 3.5(.2) を使用してこの問題に対処してきましたが、この問題の解決に役立つ回答はありませんでした。次のコード スニペットはそのトリックを行います
Post.find().sort('-posted').find(function (err, posts) {
// user posts array
});
必要な標準パラメーターfind()
(where 句や戻りフィールドなど) は送信できますが、コールバックは送信できません。コールバックがなければ、連鎖する Query オブジェクトを返しますsort()
。コールバックで結果セットを取得できるようにするには、再度呼び出す必要がありますfind()
(パラメーターの有無にかかわらず -- 効率上の理由から必要ありません)。
Post.find().sort({date:-1}, function(err, posts){
});
同様に動作するはずです
編集:
エラーが発生した場合は、これを使用することもできますsort() only takes 1 Argument
。
Post.find({}, {
'_id': 0, // select keys to return here
}, {sort: '-date'}, function(err, posts) {
// use it here
});
私はこれをします:
Data.find( { $query: { user: req.user }, $orderby: { dateAdded: -1 } } function ( results ) {
...
})
これにより、最新のものが最初に表示されます。
これが役立つかどうかを確認してください>マングースで並べ替える方法は?
こちらもお読みください> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order