mongoose#queryでsortのする

調べてたら引っかかったし、ブコメでも同じようにハマっている人がいるようなので回答を。

Word.find().sort([['created','ascending']]).each(function(doc){
  console.log(doc);
});

ちゃんと指定しているはずなんだけどなぁ。。この辺の原因分かる方は教えてくれると助かります。

この書き方だと引数が違いますし、Model.find()で返答されるものはMogoose#Queryです。なので、eachメソッドも存在しません。

ドキュメントは以下。

// sort by "field" ascending and "test" descending
query.sort({ field: 'asc', test: -1 });

// equivalent
query.sort('field -test');

なので、この形で記載するなら以下のようになります。

// 連想配列
Word.find().sort({'created','ascending'}).exec(function(err, doc){
  console.log(doc);
});
// 文字列
Word.find().sort('created').exec(function(err, doc){
  console.log(doc);
});

バージョンが違うのかもしれませんけど、3.8.0だと上記のようにすれば動くと思います。

と、書いてみたものの伝わるのかなー。