我正试图获得每天的电子邮件计数的基础上,在电子邮件状态发送和失败的条件。
db.emails.aggregate([
{
"$group":{
"_id":{
"$dateToString":{
"format":"%Y-%m-%d",
"date":"$createdAt"
},
{
"status":"$sEmailStatus"
}
}
}
}
])
1条答案
按热度按时间mkshixfv1#
我认为您正在寻找这个查询:
您的
_id
到$group
的格式不正确,所以您可以尝试这种方式(您几乎就成功了)。这里的技巧是按日期分组解析字符串,只获取日期(即按日期分组),然后将
$sum
与$cond
一起使用。如果状态为"发送",则将sent
加1。如果状态为"失败",则将failed
加1。最后是
$project
阶段,把日期放进date
域,而不是_id
域,顺便说一下,这是可选的。示例here
another approach也是使用
$size
和$filter
。但是过滤两次数组我假设比直接求和到组中更糟糕。