MongoDB按条件聚合和计数文档(C#)

4

我有一个需求,需要根据客户状态获取文档的计数。因此,我需要使用聚合函数,然后按状态进行分组。我已经使用了以下代码,但问题在于结果中我得到的是文档列表,而我想要的只是该状态下的文档计数。请问是否可以帮助调整查询以实现结果。

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

感谢您的提前支持。

如果您尝试使用ActiveType = x.key,Count = g.Count()会怎样? - federico scamuzzi
2个回答

4
您之所以会为每个键收到文档列表,是因为您运行了此嵌套的Select。您只需要这样做:
collection.Aggregate()
          .Group(
              x => x.status,
              g => new CustomerDetailsList
              {
                  ActiveType = g.Key,
                  Count = g.Count()
              }).ToList();

3

我很满意@mickl的回答,并且根据我的需求经过测试后它运作良好,但是这里是我在我的应用程序中选择的方法,因为这是我感到舒适的方式。该方法是使用 collection 作为可查询的查询对象。

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

我使用了更多的LINQ,所以选择这种方式更容易理解。

你可以选择任何一种方法,无论是这种还是@mickl演示的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接