mongodb聚合查询实现功能,统计某一个单位下短信发送总条数、成功条数、失败条数 其中短信发送成功失败状态值字段为sendStatus
时间: 2023-04-10 17:02:24 浏览: 78
可以使用 MongoDB 的聚合管道来实现这个功能。首先,需要使用 $match 操作符来筛选出特定单位的短信记录,然后使用 $group 操作符来对这些记录进行分组统计。具体的聚合管道如下:
```
db.sms.aggregate([
{ $match: { unit: "某一个单位" } },
{ $group: {
_id: null,
total: { $sum: 1 },
success: { $sum: { $cond: { if: { $eq: [ "$sendStatus", "success" ] }, then: 1, else: 0 } } },
failure: { $sum: { $cond: { if: { $eq: [ "$sendStatus", "failure" ] }, then: 1, else: 0 } } }
}
}
])
```
这个聚合管道会将符合条件的短信记录按照 sendStatus 字段进行分组统计,计算出总条数、成功条数和失败条数。其中,$cond 操作符用于根据条件进行计数,$eq 操作符用于比较字段值是否相等。
相关问题
mongodb聚合查询实现功能,统计多个组织机构下短信发送条数,组织机构字段为sendOrgCode,要根据短信发送状态 sendStatus 统计出成功条数、失败条数、总条数
可以使用 MongoDB 的聚合管道来实现这个功能。首先,使用 $match 操作符筛选出所有组织机构为指定值的短信记录,然后使用 $group 操作符对这些记录进行分组,统计成功条数、失败条数和总条数。具体实现代码如下:
db.sms.aggregate([
{ $match: { sendOrgCode: "组织机构代码" } },
{ $group: {
_id: "$sendStatus",
successCount: { $sum: { $cond: { if: { $eq: [ "$sendStatus", "成功" ] }, then: 1, else: 0 } } },
failCount: { $sum: { $cond: { if: { $eq: [ "$sendStatus", "失败" ] }, then: 1, else: 0 } } },
totalCount: { $sum: 1 }
}
}
]);
其中,$cond 操作符用于根据 sendStatus 的值来判断是否计入成功条数或失败条数。如果 sendStatus 的值为成功,则计入成功条数;如果 sendStatus 的值为失败,则计入失败条数;否则不计入任何条数。
mongodb当前表字段 sendOrgCode、sendStatus、mobile, 要求根据sendStatus统计出所有sendOrgCode的发送条数、其中包含 成功条数、失败条数、总条数
可以使用 MongoDB 的聚合框架来实现这个需求。具体的聚合管道如下:
```
db.collection.aggregate([
// 匹配 sendStatus 为成功或失败的文档
{ $match: { sendStatus: { $in: ["成功", "失败"] } } },
// 按 sendOrgCode 和 sendStatus 分组,统计条数
{ $group: {
_id: { sendOrgCode: "$sendOrgCode", sendStatus: "$sendStatus" },
count: { $sum: 1 }
} },
// 将结果按 sendOrgCode 分组,生成统计报表
{ $group: {
_id: "$_id.sendOrgCode",
totalCount: { $sum: "$count" },
successCount: {
$sum: { $cond: [ { $eq: [ "$_id.sendStatus", "成功" ] }, "$count", 0 ] }
},
failCount: {
$sum: { $cond: [ { $eq: [ "$_id.sendStatus", "失败" ] }, "$count", 0 ] }
}
} }
])
```
这个聚合管道会先匹配 sendStatus 为成功或失败的文档,然后按 sendOrgCode 和 sendStatus 分组,统计条数。最后再按 sendOrgCode 分组,生成统计报表,包括总条数、成功条数和失败条数。