web-dev-qa-db-ja.com

Mongooseでは、日付で並べ替えるにはどうすればよいですか? (node.js)

mongooseでこのクエリを実行するとします。

Room.find({}, function(err,docs){

}).sort({date:-1}); 

これは機能しません!

134
TIMEX

ソート Mongooseのリリースでは、これらの回答の一部が無効になるように進化しています。 Mongooseの4.1.xリリースの時点で、dateフィールドの降順ソートは、次のいずれかの方法で実行できます。

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) { ... });

昇順で並べ替える場合は、文字列バージョンの-プレフィックスを省略するか、1asc、またはascendingの値を使用します。

372
JohnnyHK

正解は次のとおりです。

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

});
52
TIMEX

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

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

必要な標準パラメーターをfind()(例:where句と戻りフィールド)に送信できますが、noコールバックです。コールバックがなければ、sort()をチェーンしたQueryオブジェクトを返します。コールバックで結果セットを取得できるようにするために、find()を再度呼び出す必要があります(これ以上のパラメーターを使用する場合も使用しない場合もありますが、効率上の理由から必要ありません)。

12
Jimmy Hillis
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
});
4
lynx_vbg

私はこれをします:

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

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

4
Noah

これが役立つかどうかを確認してください> mongooseでのソート方法

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

1
neebz

短い解決策:

const query = {}
const projection = {}
const options = { sort: { id: 1 }, limit: 2, skip: 10 }

Room.find(query, projection, options).exec(function(err, docs) { ... });
1
davidsonsns