0

並べ替えはマングースでは機能しませんが、私はたくさん検索したので、これがどのように可能になるのかわかりません!私が試したときはいつでもそれはうまくいきませんでした。これが私のコードです

Pics.find({}).limit(8).populate('creator').sort("created_at", 1).execFind(function(err, docs){
    console.log(docs);
});

私は得る:

TypeError: Invalid sort() argument. Must be a string or object.
at Query.sort (/Users/n/Proj/feetshot/node_modules/mongoose/lib/query.js:755:11)
at /Users/n/Proj/feetshot/app.js:112:45
at callbacks (/Users/n/Proj/feetshot/node_modules/express/lib/router/index.js:272:11)
at param (/Users/n/Proj/feetshot/node_modules/express/lib/router/index.js:246:11)
at pass (/Users/n/Proj/feetshot/node_modules/express/lib/router/index.js:253:5)
at Router._dispatch (/Users/n/Proj/feetshot/node_modules/express/lib/router/index.js:280:4)
at Object.handle (/Users/n/Proj/feetshot/node_modules/express/lib/router/index.js:45:10)
at Context.next (/Users/n/Proj/feetshot/node_modules/express/node_modules/connect/lib/http.js:204:15)
at Context.<anonymous> (/Users/n/Proj/feetshot/node_modules/passport/lib/passport/context/http/actions.js:64:8)
at SessionStrategy.pass (native)

ソートを機能させるにはどうすればよいですか?

これが私のスキーマです:

var PicSchema = new Schema({
creator: { type: Schema.ObjectId, ref: 'Users' }
, body: String
, created_at: { type: Date, default: Date.now }
, link: { type: String, index: { unique: true } }
, twitter_id: { type: String, index: { unique: true } }
, tags: [String]
  , likes: [{ type: Schema.ObjectId, ref: 'Users' }]
   });
4

2 に答える 2

4

エラーメッセージに基づいて、Mongoose 3.xを使用している必要がありますが、2.xsortメソッドパラメータスタイルを使用しています。2.7.0 Mongooseリリースに切り替えるか、並べ替えの使用法をに変更しますsort('created_at')。3.xソースから:

/**
* sort
*
* Sets the sort order. Accepts a single parameter, either an object or string.
* If an object is passed values allowed are 'asc', 'desc', 'ascending', 'descending', 1, -1.
* If a string is passed it must be a space delimited list of path names. The sort order of each path is ascending unless the path name is prefixed with `-` which will be treated as descending.
*
* Examples:
*
* // these are equivalent
* query.sort({ field: 'asc', test: -1 });
* query.sort('field -test');
*
* @param {Object|String}
* @api public
*/
于 2012-06-30T19:33:11.360 に答える
0

してみてください

  1. 文字列を使用してsortメソッド呼び出しを修正します
  2. 先に並べ替えを行います。入力する前に。

それで:

Pics.find({}).sort("created_at").limit(8).populate('creator').execFind(function(err, docs){
    console.log(docs);
});
于 2014-10-26T05:35:21.543 に答える