首页 文章

MongoDB聚合查询数组中的值

提问于
浏览
0

所以我的数据看起来像这样:

{
   _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 回答

  • 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"}}
      }}
    ])
    

    要获取键值对而不是数组,可以将 $push 替换为3.6版本的 $mergeObjects .

    "tags":{"$mergeObjects":{"$arrayToObject":[[["$_id.tags","$count"]]]}}
    

相关问题