我尝试计算一个文档与我收藏中的其他文档的匹配分数。它可以与 mapReduce 一起使用,但我想知道是否可以使用聚合(据说速度快 10 倍)。
我的文档如下:
{
name: "John",
age: 27,
track: {
section: 12,
start: 1,
end: 4
}
}
我尝试计算的分数只是min(start_track_1, start_track_2) - max(stop_track_1, stop_track_2)
因此,为了计算约翰的分数,我试图创建我的管道,但它在第二个运算符处已经失败:
db.test.aggregate(
{ $match: {
'age' : {$gte: 22, $lte: 34},
'track.section': 12,
}
},
{ $project: {
_id : 1,
name : 1,
min_end: {$min: ["$track.end", 4]},
max_start: {$max: ["$track.start", 1]}
}
}
)
shell 回答:"errmsg": "异常:无效运算符 '$min'"
问题是,我认为 $min 和 $max 运算符在数组上工作,就像 $add 和 $subtract 一样......
所以现在我陷入困境了。我认为 $group 中使用的 $min 和 $max 在这里帮不了我......
有什么想法吗?
最佳答案
聚合中的
$min
是$group
的运算符。
条件运算符将为您提供最小或默认效果。
您可以使用 $subtract
在以下管道 $project
中进行数学计算。
类似于:
db.foo.aggregate(
{ $group: {
_id : "$name",
data_min: {$min: "$track.end"},
data_max: {$max: "$track.start"}
}
},
{
$project:{
_id: "$_id",
score: { $subtract : [
{$cond:[{$gt:["$data_max",1]},"$data_max",1]},
{$cond:[{$lt:["$data_min",4]},"$data_min",4]}
]}
}
}
)
关于mongodb - 数组的最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946473/