0

マップリデュース後にソートしようとすると問題が発生します。コレクションには、ユーザーが添付された統計(スコアなど)があるため、ユーザーの最高スコアが検出されます。その部分は機能します。並べ替えは、リーダーボードの結果を並べ替えることです。これらの関数をjavascript変数に入れて、mongoコンソールで実行すると、単純なfind()。sort({'value.max.value':-1})が結果のコレクションで正常に機能しますが、取得できません。ここで動作します。(私の結果は順序付けられていない状態で戻ってきます)。

$query->map('function() { 
    var x = { value : parseInt(this.value), _id : this._id, date : this.postDate };
    emit(this.user, { max : x }); 
}')
->reduce('function(key, vals) {
    var res = vals[0];
    for (var i=1; i<vals.length; i++) 
    {
        if(vals[i].max.value > res.max.value)
            res.max = vals[i].max;
    }
    return res;
}')
->sort('value.max.value', 'desc');
4

2 に答える 2

0

sortmap-reduce の は、結果ではなく、入力ドキュメント ( に供給される) に適用さますmap。map-reduce の結果を並べ替えたい場合は、コレクションに出力してから、findそのコレクションに対して並べ替えられたクエリを実行する必要があります (成功したように)。

于 2013-01-16T22:26:12.647 に答える