如何获得所有文档中数组中每个项目的总和?

时间:2019-09-27 16:09:49

标签: mongodb mongoose

我想获得所有文档中数组中所有项目出现的汇总/计数。我尝试查找示例,但是似乎没有一个示例能够完全涵盖这种情况或以一种非常晦涩的方式进行处理。

这是我正在使用的文档模型的简单概念。每个对象中的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
        }
    ]
}

1 个答案:

答案 0 :(得分:2)

请尝试:

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