$ group之后基于字符串的Mongo查询计数字段数

时间:2019-05-03 14:21:05

标签: mongodb mongodb-query

我想查询某个日期之后的呼叫数量,求和它们的持续时间,将它们按groupId分组,然后计算活跃/不活跃的参与者数量。有效/无效状态由字符串表示。

我尝试搜索有关条件状态总和的语法的文档和stackoverflow,但是在执行$ group之后,我找不到这样做的任何示例

db.calls.aggregate(
{ 
    $match : { createdAt: { $gte: ISODate("2019-05-02 18:58:46.284Z") } }
},
{ 
    $group : { 
       _id : "$groupId", 
       totalCalls : { $sum : 1 },
       totalDuration : { $sum : "$duration" },
       totalInactiveState : { $count : "state.active" },
       totalActiveState : { $count : "state.inactive" }

    }
})

1 个答案:

答案 0 :(得分:0)

$cond可以满足您的需求。基本上,运行if场景是有条件的语句

db.calls.aggregate(
{ 
    $match : { createdAt: { $gte: ISODate("2019-05-02 18:58:46.284Z") } }
},
{ 
    $group : { 
       _id : "$groupId", 
       totalCalls : { $sum : 1 },
       totalDuration : { $sum : "$duration" },
       totalInactiveState : { $sum : { $cond: [{'state.active': false}, 1, 0 ] } },
       totalActiveState : { $sum : { $cond: [{'state.active': true}, 1, 0 ] } }
    }
})