如何在Mongo查询中对字段进行算术组合

时间:2013-09-05 15:57:21

标签: mongodb

我有一个像这样的记录的集合:

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

我希望能够查询集合以返回分数值组合满足或超过标准的记录。例如,查找score.x和score.y之和超过阈值的所有记录。

如果可能,我想避免预先计算该值。

3 个答案:

答案 0 :(得分:1)

以下聚合代码应该可以解决问题

db.<your_collection>.aggregate([{$project : { "sum" : {$add:["$scores.x", "$scores.y"]}}},{$match:{sum:{$gte:<threshold_value>}}}])

答案 1 :(得分:0)

您可以使用包含算术运算符的新Aggregation Framework。请看this stackoverflow post

答案 2 :(得分:0)

根据此讨论,您可以使用map / reduce:

db.runCommand({
        "mapreduce": "coll",
        "map": function() { 
                emit({id:this.id},{ 
                        x: this.x,
                        y: this.y
                     });  
        },
        "reduce": function(key,vals) { 
                return 1; 
        },
        "out": { 
                inline : 1 
        },
        "finalize": function(key, vals) {
                return { sum: vals.x + vals.y};
        }
});