我想查询某个日期之后的呼叫数量,求和它们的持续时间,将它们按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" }
}
})
答案 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 ] } }
}
})