排序不适用于Mongoose,但我不明白这是怎么可能的,因为我搜索了这么多!任何时候我尝试它都没有用。这是我的代码
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' }]
});
答案 0 :(得分:4)
根据您的错误消息,您必须使用Mongoose 3.x,但是您使用的是2.x sort
方法参数样式。切换到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
*/
答案 1 :(得分:0)
尝试
所以:
Pics.find({}).sort("created_at").limit(8).populate('creator').execFind(function(err, docs){
console.log(docs);
});