MongoDB汇总查询计数

时间:2019-01-22 21:07:52

标签: c# mongodb mongodb-.net-driver

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

MaxDefense

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

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

我正在尝试通过此代码来实现。

Animation: 2
Comedy: 2
Action: 1

我多次更改都没有成功

1 个答案:

答案 0 :(得分:1)

.Group()在这里用于构建一个表达式,该表达式被转换为Aggregation的Framework $group流水线阶段。事实是,MongoDB的语法与LINQ中的语法有些不同,因此您应该在这里考虑更多的“ MongoDB方式”。

从技术上讲,$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();