MongoDB 聚合查询计数

MongoDB aggregate query count

我正在使用 MongoDB 和 C# 制作应用程序。我使用 MongoDB C# 驱动程序。我有以下 collection:

{
    _id: 5099803df3f4948bd2f98391,
    title: Toy Story,
    genres: [ "Animation", "Comedy" ]
},
{
    _id: 5099803df3f4948bd2f98392,
    title: Minions,
    genres: [ "Animation", "Comedy", "Action" ]
}

现在我想查询数据并获取每种类型的电影数量。所以结果应该是:

Animation: 2
Comedy: 2
Action: 1

我正在尝试使用此代码实现此目的。

database.GetCollection<Movie>("Movies")
     .Aggregate()
     .Unwind<Movie>(x => x.Genres)
     .Group(x=>x.Genres, g => new
     {
          Genre= g.Key,
          Count = g.Select(x=>x.Genres).Count()
     }).ToList();

改了好多次都没成功

.Group() 在这里用于构建一个表达式,该表达式被翻译到聚合的框架 $group 管道阶段。问题是 MongoDB 的语法与您在 LINQ 中的语法有点不同,因此您应该在这里多考虑 "MongoDB way"。

从技术上讲,$group 将为您提供包含两个字段的文档集合:_id(这就是分组键被翻译成的内容)和 Count。因此,要修复您的查询,您可以引入如下简单类型:

public class GenreStats
{
    [BsonElement("_id")]
    public string Genre { get; set; }
    public int Count { get; set; }
}

然后使用该类型反序列化您的聚合结果:

database.GetCollection<Movie>("Movies")
    .Aggregate()
    .Unwind<Movie, Movie>(x => x.Genres)
    .Group(x=>x.Genres, g => new
    {
        Count = g.Count()
    }).As<GenreStats>().ToList();