所以我有如下数据:
{
_id: 1,
ranking: 5,
tags: ['Good service', 'Clean room']
}
其中每一个都需要进行审查。可以有多个评论,排名为5。标签字段最多可以填充4个不同的标签。
4个标签是:“优质服务”,“美食”,“洁净室”,“需要改善”
我想做一个MongoDB聚合查询,在这里我说:“对于每个排名(1-5),给我每个标签为每个排名出现的次数。
因此示例结果可能如下所示,_id为排名:
[
{ _id: 5,
totalCount: 5,
tags: {
goodService: 1,
goodFood: 3,
cleanRoom: 1,
needImprovement: 0
},
{ _id: 4,
totalCount: 7,
tags: {
goodService: 0,
goodFood: 2,
cleanRoom: 3,
needImprovement: 0
},
...
]
在计数每个标签的出现次数时遇到麻烦。任何帮助将不胜感激
答案 0 :(得分:2)
您可以尝试以下汇总。
db.colname.aggregate([
{"$unwind":"$tags"},
{"$group":{
"_id":{
"ranking":"$ranking",
"tags":"$tags"
},
"count":{"$sum":1}
}},
{"$group":{
"_id":"$_id.ranking",
"totalCount":{"$sum":"$count"},
"tags":{"$push":{"tags":"$_id.tags","count":"$count"}}
}}
])
要获取键值对而不是数组,可以从3.6版开始将$push
替换为$mergeObjects
。
"tags":{"$mergeObjects":{"$arrayToObject":[[["$_id.tags","$count"]]]}}