MongoDB совокупное количество запросов - PullRequest
0 голосов
/ 23 января 2019

Я делаю заявку с MongoDB и C #.Я использую драйвер MongoDB C #.У меня есть следующая коллекция:

{
    _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();

Я менял его несколько раз безуспешно

1 Ответ

0 голосов
/ 23 января 2019

.Group() используется здесь для построения выражения, которое переводится в стадию конвейера Aggregation $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();
...