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
                    }
        }
    }]
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用reduce对数据组中的数据组进行计数

使用mongodb聚合框架对数组中的相似项目进行计数

mongodb:对数组的内容进行计数和排序

MongoDB按名称对数组中的项目进行计数

在mongodb中对数组内的元素进行计数

使用JS中的递归函数对数组的元素进行计数

Excel公式:使用条件对数组元素进行计数

使用jQuery对数组中的值频率进行计数

使用 foreach 按组和人对数组进行排序

在JavaScript中对数组的数组进行计数

如何根据语句对数组进行计数?

使用 $lookup 对数组中的字段进行 MongoDB 聚合

我如何根据mongodb中的值对数组中的文档进行计数?

MongoDB聚合,对数组中的每一项进行计数并按项分组

MongoDB $ reduce(aggregation)组,其中嵌套文档的总和以数组为单位,并按组进行计数

使用多个值对数组进行分组,并基于循环和排序数组中的组值对数组求和

SQL分组依据对数据组的记录进行计数

使用哈希集对数组中的字符串数量进行计数(无重复)

使用嵌套对象对数组内的值进行分组和计数

根据子数组计数对数组进行排序

Fortran:未知的数组大小(对数组中的元素进行计数)

Mongodb-按键对数组进行分组

组计数2项对象数组mongodb

使用数组的比率对数组进行排序

对数组交叉点进行计数和排序

对数组的唯一值进行排序和计数

用科学计数法对数字数组进行排序

对数组中的对象进行计数,忽略null

如何根据值对数组中的元素进行计数