我有一个像这样的记录的集合:
{
"scores" : {
"x" : 1,
"y" : 2
},
}
我希望能够查询集合以返回分数值组合满足或超过标准的记录。例如,查找score.x和score.y之和超过阈值的所有记录。
如果可能,我想避免预先计算该值。
答案 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}; } });