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",
        “地图”:函数(){
                发射({id:this.id},{
                        x: 这个.x,
                        y:这个.y
                     });  
        },
        “减少”:函数(键,vals){
                返回 1;
        },
        “出去”: {
                内联:1
        },
        “最终确定”:函数(键,vals){
                返回{总和:vals.x + vals.y};
        }
});
于 2013-09-05T16:10:33.997 回答
0

您可以使用包含算术运算符的新聚合框架。看看这个 stackoverflow 帖子

于 2013-09-05T16:06:53.420 回答