我正在使用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
我多次更改都没有成功
答案 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();