次のようなレコードを含むコレクションがあります。
{
"scores" : {
"x" : 1,
"y" : 2
},
}
コレクションをクエリして、スコア値の組み合わせが基準を満たすか超えるレコードを返すことができるようにしたいと考えています。たとえば、score.x と score.y の合計がしきい値を超えているすべてのレコードを検索します。
可能であれば、値を事前に計算することは避けたいです。
次のようなレコードを含むコレクションがあります。
{
"scores" : {
"x" : 1,
"y" : 2
},
}
コレクションをクエリして、スコア値の組み合わせが基準を満たすか超えるレコードを返すことができるようにしたいと考えています。たとえば、score.x と score.y の合計がしきい値を超えているすべてのレコードを検索します。
可能であれば、値を事前に計算することは避けたいです。
次の集計コードでうまくいくはずです
db.<your_collection>.aggregate([{$project : { "sum" : {$add:["$scores.x", "$scores.y"]}}},{$match:{sum:{$gte:<threshold_value>}}}])
この議論によると、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};
}
});