首页 > 解决方案 > 如何获得所有文档中数组中每个项目出现的总和?

问题描述

我想获取所有文档中数组中所有项目出现的聚合/计数。我已经尝试查找示例,但它们似乎都没有完全涵盖这种情况或以非常迟钝的方式进行。

这是我正在使用的文档模型的一个简单想法。每个对象中的itemIds数组总是唯一的(没有重复值):

[{
    _id:1,
    itemIds:[3, 4, 6, 12]
},
{
    _id:2,
    itemIds:[4, 12]
},
{
    _id:3,
    itemIds:[3, 4, 8, 9, 12]
}]

我需要总结每个这些的计数(不必是这种确切的格式,而只是大致了解我需要什么):

{
    itemsCount:[
        {
           itemId:3,
           count:2
        },
        {
           itemId:4,
           count:3
        },
        {
           itemId:6,
           count:1
        },
        {
           itemId:8,
           count:1
        },
        {
           itemId:9,
           count:1
        },
        {
           itemId:12,
           count:3
        }
    ]
}

标签: mongodbmongoose

解决方案


请试试这个:

    db.yourCollection.aggregate([
{$project : {'itemIds' : 1, _id :0}},
{$unwind : '$itemIds'}, 
{$group : {'_id': '$itemIds', count :{$sum :1}}}
])

推荐阅读