我有一个这样的记录集合:
{
"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 帖子。