如何按字段对文档进行分组

How to group documents by field

假设我的 mongo collection 中有一个这样的文档。

{
actorId:"101"
 movieType:"action"
movieName:"movie1"
},
{
actorId:"102"
 movieType:"comedy",
movieName:"movie2"
},
{
actorId:"101"
 movieType:"action",
movieName:"movie3"
},
{
actorId:"101"
 movieType:"comedy"
name:"movie4",
},
{
actorId:"102"
 movieType:"action"
movieName:"movie5"
}

我想知道代理喜欢的不同类型的电影

agents:[
{
  id:101,
  Movietypes:[
{
 type:"action",
  count:2
},
{
 type:"comedy",
count:1
}
]
}
]

如果有人能指导我如何获得上述回复,那将非常有帮助。我搜索了但没有找到任何解决方案,寻求您的帮助

您可以先使用$group on actorId and movieType with $sum来计算每个演员的每种电影类型。然后另一个 $group 阶段将每个演员的所有电影类型累积到 1 个文档中。

[
  {
    '$group': {
      '_id': {
        'actorId': '$actorId', 
        'movieType': '$movieType'
      }, 
      'count': {
        '$sum': 1
      }
    }
  }, {
    '$group': {
      '_id': '$_id.actorId', 
      'movieTypes': {
        '$push': {
          'type': '$_id.movieType', 
          'count': '$count'
        }
      }
    }
  }
]

这将 return 多个文档(每个演员 1 个)并包含 movieTypes 数组,如下面的屏幕截图所示。

如果你想 return 带有 agents 数组的单个文档,那么你可以添加另一个阶段,如下所示:

{
    '$group': {
      '_id': null, 
      'agents': {
        '$push': {
          'id': '$_id', 
          'movieTypes': '$movieTypes'
        }
      }
    }
}

加入第三个小组赛阶段后的输出将是: