mongodb - $sum 有多个条件

标签 mongodb mongodb-query aggregation-framework

我需要用 $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/

相关文章:

javascript - NodeJS 从 MongoDB 检索多个数据并显示在 Jade(Pug) 上

angularjs - angular-meteor 中客户端数据库操作的问题

mongodb - meteor :如何禁用默认的 mongodb?

java - Spring Data聚合查询

Mongodb group by 和 sum 并使用 Map 获取媒体

javascript - mongodb聚合被字符串化并且在node js中不起作用

node.js - 构建我的 Mongoose 模式 : embedded array , 填充的最佳方法,子文档?

MongoDB - 如果字段不存在,如何设置该字段的值;如果该字段已存在于文档中,则如何保留该字段

node.js - 带有nodejs的Mongodb - 在计数结果后用组查询

mongodb - Mongoose 更新: Increment a counter and reset to 0 on a new date