MongoDB GroupBy Агрегировать и считать документы C# - PullRequest
1 голос
/ 21 апреля 2020

У меня есть требование, чтобы получить количество документов на основе статуса клиента. Поэтому мне нужно использовать агрегатную функцию, а затем группировать по статусу. Для этого я использовал следующий код, но проблема в том, что в Result я получаю список документов, но мне просто нужно иметь статус и количество документов в этом списке. Может ли любой орган, пожалуйста, помогите в настройке запроса для достижения результатов.

var result = collection.Aggregate()
                    .Group(
                        x => x.status,
                        g => new
                        {
                            Result = g.Select(x => new CustomerDetailsList
                            {
                                ActiveType = x.status,
                                Count = g.Count()
                            }
                             )
                        }
                    );

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Я удовлетворен ответом @ mickl , и он работает хорошо, так как я тестировал в соответствии с моими требованиями, но вот как я выбрал свое приложение, так как это то, что мне удобно. Метод состоит в том, чтобы использовать коллекцию как запрашиваемую

var result = collection.AsQueryable()
            .GroupBy(x => x.status)
            .Select(x => new CustomerDetailsList 
            { 
                ActiveType = x.Key, Count = x.Count()
            }).ToList();

Я использовал больше LINQ таким образом, поэтому я выбрал это, так как это лучше для меня понять.

Вы можете выбрать любой из методов, либо этот, либо как продемонстрировано @ mickl

1 голос
/ 22 апреля 2020

Причина, по которой вы получаете список документов для каждого ключа, заключается в том, что вы используете этот вложенный Select, все, что вам нужно:

collection.Aggregate()
          .Group(
              x => x.status,
              g => new CustomerDetailsList
              {
                  ActiveType = g.Key,
                  Count = g.Count()
              }).ToList();
...