27

我对 mongodb 很陌生。我设法获得了仅基于 1 个参数的简单排序的基本概念。如果有超过 2 个排序参数怎么办。例如,在由具有属性totalCuttingTimefavorited.

以下是正确的 mongoose/mongodb 函数,用于查找具有leasttotalCuttingTime 和 order in 根据 highest最喜爱的Counts 到最低的项目列表。

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

1 回答 1

69

您需要将这两个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]])
于 2012-11-27T15:20:43.433 回答