mongoose / mongodb查询多种排序

时间:2012-11-26 15:30:09

标签: javascript mongodb mongoose

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

以下是一个正确的mongoose / mongodb函数,用于查找具有least totalCuttingTime并按照highest favoriteCounts到最低的顺序排列的项目列表。

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

1 个答案:

答案 0 :(得分:49)

您需要将两个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)
            }
        );
};

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

.sort([['totalCuttingTime', 1], ['favoriteCount', -1]])