27

私はmongodbにまったく慣れていません。私はなんとか1つのパラメータだけに基づく単純なソートの基本的な考えを得ることができます。3つ以上のソートパラメータがある場合はどうなりますか。たとえば、属性totalCuttingTimeとを持っている木工プロジェクトで構成されたデータベースではfavorited

以下は正しいmongoose/mongodb関数であり、leasttotalCuttingTimeを持つプロジェクトのリストを検索し、favoriteCountsの順に並べ highestます。

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両方の用語を1つのオブジェクトに入れる必要があります。

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 に答える