mongodb - 如何获得所有文档中数组中每个项目出现的总和?
问题描述
我想获取所有文档中数组中所有项目出现的聚合/计数。我已经尝试查找示例,但它们似乎都没有完全涵盖这种情况或以非常迟钝的方式进行。
这是我正在使用的文档模型的一个简单想法。每个对象中的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
}
]
}
解决方案
请试试这个:
db.yourCollection.aggregate([
{$project : {'itemIds' : 1, _id :0}},
{$unwind : '$itemIds'},
{$group : {'_id': '$itemIds', count :{$sum :1}}}
])
推荐阅读
- c++ - OpenGL glfw 无法使用着色器绘制点
- amazon-web-services - Dynamodb 使用从主键查询开始
- javascript - 如何仅在向上滚动时显示此粘性导航?
- javascript - 如何在 LeafletJs 的弹出窗口中显示情节?
- java - 无法更新房间数据库中的布尔数组
- react-native - 排按反应原生
- vue.js - fetch() 方法在 Nuxtjs 的组件中使用时抛出错误
- python - 我已经定义了一个带有属性的类,但是当我输入一个测试代码时,它没有返回任何东西
- regex - 如何使用正则表达式 vscode 找出 Python 函数定义
- c++ - 在没有与号 (&) 运算符的 C++ 中获取内存地址