我需要用 $sum 转换当前的 $group 以添加另一个条件:
Actually sum a field if a $eq return true.
现在,如果 $eq 返回 true 并且 $exists 返回 true,我想对字段求和。
我目前的小组是这样的:
"techsWorkQty": {
"$sum": {
"$cond": [
{ "$eq": [
"$works.TechnicianId", id
]},
1,
0
]
}
}
我在哪里可以添加以下子查询?
{
$works.percent:{$exists:true}
}
最佳答案
$exists
运算符只是一个“查询”运算符,只能用于 $match
聚合管道。为了将字段存在作为“逻辑”运算符进行测试,您需要使用 $ifNull
. $and
运算符用于组合逻辑条件,也是与同名查询形式相对的逻辑运算符。逻辑运算符可用于 $project
和 $group
阶段:
"techsWorkQty": {
"$sum": {
"$cond": [
{ "$and": [
{ "$ifNull": [ "$works.percent", false ] },
{ "$eq": [ "$works.TechnicianId", id ] }
]},
1,
0
]
}
}
$ifNull
返回该字段存在的字段值或该字段不存在时指定的替代值。在这种情况下,当前字段的“值”将评估为 true
在 bool 上下文中。如果没有字段,则 false
返回参数。 $and
bool 形式需要两个逻辑表达式的计算结果为真,否则它本身返回 false
这是由包装处理 $cond
返回适当的值。
关于mongodb - $sum 有多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25061377/