我有一个这样的记录集合:
{
"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",
“地图”:函数(){
发射({id:this.id},{
x: 这个.x,
y:这个.y
});
},
“减少”:函数(键,vals){
返回 1;
},
“出去”: {
内联:1
},
“最终确定”:函数(键,vals){
返回{总和:vals.x + vals.y};
}
});
您可以使用包含算术运算符的新聚合框架。看看这个 stackoverflow 帖子。