0

次のようなレコードを含むコレクションがあります。

{
"scores" : {
    "x" : 1,
    "y" : 2
},
}

コレクションをクエリして、スコア値の組み合わせが基準を満たすか超えるレコードを返すことができるようにしたいと考えています。たとえば、score.x と score.y の合計がしきい値を超えているすべてのレコードを検索します。

可能であれば、値を事前に計算することは避けたいです。

4

3 に答える 3

1

次の集計コードでうまくいくはずです

db.<your_collection>.aggregate([{$project : { "sum" : {$add:["$scores.x", "$scores.y"]}}},{$match:{sum:{$gte:<threshold_value>}}}])
于 2013-09-05T18:01:56.393 に答える
0

この議論によると、map/reduce を使用できます。

db.runCommand({
        "mapreduce": "coll",
        "マップ": 関数() {
                emit({id:this.id},{
                        x: this.x、
                        y: this.y
                     });  
        }、
        "reduce": function(key,vals) {
                1 を返します。
        }、
        "アウト": {
                インライン: 1
        }、
        "ファイナライズ": 関数 (キー、値) {
                return { 合計: vals.x + vals.y};
        }
});
于 2013-09-05T16:10:33.997 に答える