次のようなレコードを含むコレクションがあります。
{
"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}; } });