Mongoose/mongodb запрос нескольких сортировок

Я очень новичок в mongodb. Мне удается получить базовое представление о простом сортировке, основанном только на 1 параметре. что, если имеется более двух параметров сортировки. например, в базе данных, состоящей из проектов деревообработки, имеющих атрибуты totalCuttingTime и favorited.

Является следующей правильной функцией 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

Вам нужно включить оба выражения 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)
            }
        );
};

Стоит отметить, что стандарт ECMA-262, на котором основан Node.js, не указывает, что порядок свойств объекта поддерживается, и он только стандарт де-факто, чтобы соответствовать порядку вставки. Чтобы устранить любые сомнения, вы можете использовать массив:

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