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; } ```

Original source