mongodb - MongoDB:使用组计算数组
问题描述
我需要一种对数组进行分组和计数的方法。我想要实现的是按“类型”返回计数
下面是我的部门文件的样子
{
"_id" : ObjectId("1234566789"),
"jobStatus" : "OK",
"request" :
{
"header" : {
"timestamp" : "2020-10-21 00:00:00.000Z",
"action" : "importAction",
"type" : "registration"
},
"body" : [{
"system_header" : {
"student" : "2019051",
"course" : "Business"
}
}]
}
}
当我指望时,我用下面的方法进行了第一次搜索
db.department.aggregate(
[{
$match: {
sysDateI: {
$gt: ISODate("2020-10-18 22:00:00.000Z"),
$lt: ISODate("2020-10-19 22:00:00.000Z")
}
}
}, {
$group: {
_id: '$request.header.type',
COUNT: {
$sum: 1
}
}
}]
)
并产生了以下令人满意的
/* 1 */
{
"_id" : "alumni",
"COUNT" : 3
}
/* 2 */
{
"_id" : "graduation",
"COUNT" : 5
}
/* 3 */
{
"_id" : "registration",
"COUNT" : 43
}
但是当我尝试使用下面的“body”部分计算内容时,它返回数组的内容而不是求和
编码
db.department.aggregate(
[{
$match: {
sysDateI: {
$gt: ISODate("2020-10-18 22:00:00.000Z"),
$lt: ISODate("2020-10-19 22:00:00.000Z")
}
}
}, {
$group: {
_id: '$request.body.system_header.course',
COUNT: {
$sum: 1
}
}
}]
)
结果如下
{
"_id":[
"Education",
"Education",
"Education",
"Business",
"Science"
],
"COUNT" : 1.0
}
我需要返回的是这样的东西。我确实意识到 system_header 是一个数组。
{
"_id":"Business",
"COUNT":45
}
{
"_id":"Education",
"COUNT":3
}
您的指导将不胜感激
解决方案
嗨,在这样的组之前添加 $unwind:
db.department.aggregate(
[{
$match: {
sysDateI: {
$gt: ISODate("2020-10-18 22:00:00.000Z"),
$lt: ISODate("2020-10-19 22:00:00.000Z")
}
}
},
{
$unwind: "$request.body"
},
{
$group: {
_id: '$request.body.system_header.course',
COUNT: {
$sum: 1
}
}
}]
)
推荐阅读
- vb.net - 为什么Visual Studio在声明字符串数组列表时会抛出异常
- python - pandas:选择所选行的相邻行
- java - HttpServletResponse,addCookie() 未按预期运行
- python - 在 csv 中正确保存和加载 pandas 数据帧,同时保留 datetimeindex 的频率
- php - 使用 PHP 向表单元素添加属性
- php - 如何使用mysql中的内部连接获取具有空值和填充值的ID
- javascript - TypeError:state.userInfo 在 Jest 测试中不可迭代
- java - Android 如何在 Java 中使用 Kotlin-Coroutine?
- javascript - 数据表多个自定义工具栏元素
- asp.net - 如何在 ASP.NET MVC 中查找 HTML 列表项的索引