MongoDB聚合查询数组中的值

时间:2018-08-21 16:23:00

标签: mongodb aggregation-framework

所以我有如下数据:

{
   _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
   }, 
   ...
]

在计数每个标签的出现次数时遇到麻烦。任何帮助将不胜感激

1 个答案:

答案 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"]]]}}