mongoose/mongodb查询多种排序

bou*_*ppo 20 javascript mongoose mongodb

我对mongodb很新.我设法只得到一个基于1参数的简单排序的基本概念.如果有超过2个排序参数怎么办?例如,在由具有属性totalCuttingTime和属性的木工项目组成的数据库中favorited.

以下是一个正确的leastmongoose/mongodb函数,用于查找具有totalCuttingTime并按照highestfavoriteCounts到最低顺序 的项目列表.

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;
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 53

您需要将两个sort术语放在一个对象中:

exports.getMinCuttingTime = function(number, callback){ 
    ProjectModel.find()
        .sort({totalCuttingTime: 1, favoriteCount: -1})
        .select({_id: 1})
        .limit(number)
        .exec(
            function(err, projects) {
                callback(null, projects)
            }
        );
};
Run Code Online (Sandbox Code Playgroud)

值得注意的是,Node.js所基于的ECMA-262标准并未指定维护对象的属性顺序,并且它只是匹配插入顺序的事实上的标准.为了消除任何疑问,您可以使用数组:

.sort([['totalCuttingTime', 1], ['favoriteCount', -1]])
Run Code Online (Sandbox Code Playgroud)

  • 鉴于JavaScript中的对象键在技术上是无序的,这是否保证首先按`totalCuttingTime`排序,然后是'favouriteCount`? (2认同)