MongoDB按数组中的元素分组
Posted
技术标签:
【中文标题】MongoDB按数组中的元素分组【英文标题】:MongoDB group by elements in array 【发布时间】:2021-12-22 14:27:23 【问题描述】:我有一个如下所示的集合:
"id": "id1",
"tags": ['a', 'b']
,
"id": "id2",
"tags": ['b', 'c']
,
"id": "id3",
"tags": ['a', 'c']
如何进行按“tags”数组中的每个元素分组的查询,结果如下所示?:
'a': 2,
'b': 2,
'c': 2
(其中 2 是它出现的次数,计数)。 感谢您的帮助!
【问题讨论】:
【参考方案1】:您可以使用此聚合查询:
首先将$unwind
数组解构为类似对象的访问。
然后$group
by tags
和 $sum
1 得到总数。
最后使用$replaceRoot
和$arrayToObject
来获得所需的输出。
db.collection.aggregate([
"$unwind": "$tags"
,
"$group":
"_id": "$tags",
"count":
"$sum": 1
,
"$replaceRoot":
"newRoot":
"$arrayToObject": [
[
"k": "$_id",
"v": "$count"
]
]
])
例如here
作为补充,如果您想获得排序值(a、b、c...),您可以添加$sort
阶段,如this example
【讨论】:
非常感谢您的完整回答!这对我帮助很大以上是关于MongoDB按数组中的元素分组的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb:按元素分组并根据条件显示子文档计数并按日期对文档进行排序