202

Mongoose で次のクエリを実行するとします。

    Room.find({}, (err,docs) => {
    
    }).sort({date:-1}); 

これはうまくいきません!

4

11 に答える 11

529

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

于 2013-02-26T03:57:41.190 に答える
58

正解は次のとおりです。

Blah.find({}).sort({date: -1}).execFind(function(err,docs){

});
于 2011-04-29T10:48:55.707 に答える
17

今日、Mongoose 3.5(.2) を使用してこの問題に対処してきましたが、この問題の解決に役立つ回答はありませんでした。次のコード スニペットはそのトリックを行います

Post.find().sort('-posted').find(function (err, posts) {
    // user posts array
});

必要な標準パラメーターfind()(where 句や戻りフィールドなど) は送信できますがコールバックは送信できません。コールバックがなければ、連鎖する Query オブジェクトを返しますsort()。コールバックで結果セットを取得できるようにするには、再度呼び出す必要がありますfind()(パラメーターの有無にかかわらず -- 効率上の理由から必要ありません)。

于 2012-12-28T04:20:20.423 に答える
8
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
});
于 2013-02-26T03:26:50.883 に答える
4

私はこれをします:

Data.find( { $query: { user: req.user }, $orderby: { dateAdded: -1 } } function ( results ) {
    ...
})

これにより、最新のものが最初に表示されます。

于 2015-02-06T19:02:09.547 に答える
2

これが役立つかどうかを確認してください>マングースで並べ替える方法は?

こちらもお読みください> http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order

于 2011-04-28T22:12:00.750 に答える