MongoDBでコレクションを日付順に並べ替える方法は?


125

Node.JSでMongoDBを使用しています。日付とその他の行を含むコレクションがあります。日付はJavaScript Dateオブジェクトです。

このコレクションを日付で並べ替えるにはどうすればよいですか?


1
simple、collection.find()。sort({datefield:1}、function(err、cursor){...}); または、collection.find()。sort({datefield:-1}、function(err、cursor){...});を使用することもできます。
Atul Jain、2015年

あなたは必要ないかもしれないと注意date列を:stackoverflow.com/questions/5125521/...
phil294

回答:


186

@JohnnyHKの回答を少し変更する

collection.find().sort({datefield: -1}, function(err, cursor){...});

多くのユースケースでは、最新のレコードが返されるようにしたいと考えています(最新の更新/挿入の場合など)。


1
関数に何を入れるつもりですか?Date2.6.3では、関数を使用せずにオブジェクトをソートしようとしてもうまくいきません。
Sam Brightman、

@SamBrightmanその関数は単なるコールバックです。クエリ結果をどのように処理するにしても、そのロジックをコールバック内に配置します。コールバックとは何か、およびコールバックがイベントベースのプログラミングを学習するためにどのように機能するかについて詳しく読むことができます。
Sushant Gupta、2015

確かに、私はコールバックが何であるかを知っています。私は質問で並べ替えの要件を見ただけで、すべての回答がコールバックを提供します。同時に、並べ替えがうまくいかなかったので、関数で追加の作業を行う必要があると思いました。
Sam Brightman、

1
@SamBrightmanああ、わかりました。便宜上、次のように明示的でチェーンにすることができますcollection.find().sort(...).exec(function(err, cursor) {})
Sushant Gupta

5
sort()は1つの引数しか取らないと言っています
Jitendra Pancholi

39

日付で並べ替えるのに特別なことは必要ありません。コレクションの目的の日付フィールドで並べ替えるだけです。

1.4.28のnode.jsネイティブドライバー用に更新されましdatefieldた。次のいずれかの方法を使用して昇順で並べ替えることができます。

collection.find().sort({datefield: 1}).toArray(function(err, docs) {...});
collection.find().sort('datefield', 1).toArray(function(err, docs) {...});
collection.find().sort([['datefield', 1]]).toArray(function(err, docs) {...});
collection.find({}, {sort: {datefield: 1}}).toArray(function(err, docs) {...});
collection.find({}, {sort: [['datefield', 1]]}).toArray(function(err, docs) {...});

'asc'またはの'ascending'代わりに使用することもでき1ます。

降順で並べ替えるには'desc'、の代わりに、、'descending'または-1を使用し1ます。


上記の解決策をユーザー名フィールドに適用していますが、問題なく機能していますが、大文字と小文字が区別されます。無視するにはどうすればよいですか。
Rahul Matte

マルチウェイでの正解(y)
アブドゥルバリク2018

29
db.getCollection('').find({}).sort({_id:-1}) 

これにより、挿入日に基づいてコレクションが降順で並べ替えられます


16

Sushant Guptaの回答は少し古くなっており、もう動作しません。

次のスニペットは、このようになっているはずです。

collection.find({}, {"sort" : ['datefield', 'asc']} ).toArray(function(err,docs) {});


@JohnnyHK甘い。正確なシナリオは覚えていませんが、去年の夏、Sushantのスニペットを使用してこのようなコードを機能させようとしていましたが、うまくいきませんでした。欠けていたせいかもしれませんtoArray
krikara

これは実際には間違った答えです。node.jsで誤った結果が返されます
David A

12

これは私のために働きました:

collection.find({}, {"sort" : [['datefield', 'asc']]}, function (err, docs) { ... });

Node.js、Express.js、Monkの使用



5

マングースを使用すると、次のように簡単です。

collection.find().sort('-date').exec(function(err, collectionItems) {
  // here's your code
})

4

並べ替えパラメーターを機能させるには、追加の角[]ブラケットが必要です。

collection.find({}, {"sort" : [['datefield', 'asc']]} ).toArray(function(err,docs) {});

2

日付形式が次のような場合:1989年2月14日---->問題が発生する可能性があります

次のようにISOdateを使用する必要があります。

var start_date = new Date(2012, 07, x, x, x); 

----->結果------> ISODate( "2012-07-14T08:14:00.201Z")

今すぐこのようなクエリを使用してください:

 collection.find( { query : query ,$orderby :{start_date : -1}} ,function (err, cursor) {...}

それでおしまい :)


2

TypeError: Collection.find(...).sort(...).toArray is not a function. mongoose を使用すると、「toArray」を使用できず、エラーが発生しました。ToArray関数は、ネイティブMongoDB NodeJSドライバーのCursorクラスに存在します(参照)。

また、sortはパラメーターを1つしか受け入れないため、その中に関数を渡すことはできません。

これは私のために働きました(エミールによって答えられたように):

collection.find().sort('-date').exec(function(error, result) {
  // Your code
})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.