mongoose/mongodb query multiple sort
javascript, mongodb, mongoose
Solution
You need to put both `sort` terms into one object:
exports.getMinCuttingTime = function(number, callback){
ProjectModel.find()
.sort({totalCuttingTime: 1, favoriteCount: -1})
.select({_id: 1})
.limit(number)
.exec(
function(err, projects) {
callback(null, projects)
}
);
};
It's worth noting that the ECMA-262 standard on which Node.js is based doesn't specify that an object's property order is maintained, and it's only a de facto standard to match insertion order. To eliminate any doubt, you can use an array instead:
.sort([['totalCuttingTime', 1], ['favoriteCount', -1]])
Problem
i'm quite new to mongodb. i manage to get a basic idea of a simple sort based only 1 parameter. what if there are more than 2 sort parameters. for instance, in a database made up of woodworking projects that have attributes `totalCuttingTime` and `favorited`. Is the following a correct mongoose/mongodb function to find a list of projects that have the `least` totalCuttingTime and order in according to `highest` favoriteCounts to lowest. `var ProjectModel= mongoose.model('Project', schema);` ``` exports.getMinCuttingTime = function(number, callback){ var leastCutTimeResult = ProjectModel.find().sort({totalCuttingTime: 1}).select({_id: 1}).limit(number).exec( function(err, projects) { callback(null, projects) } ); var result = leastCutTimeResult.find().sort({favoriteCount: -1}).select({_id: 1}).limit(number).exec( function(err, projects) { callback(null, projects) } ); return result; } ```