我正在尝试过滤集合中的数百万个文档,然后对其中一个属性应用分组。我需要知道金额属性的总和。我已经编写了以下代码,但总和似乎总是0,即使数量存在于集合中的每个文档中。
var results = collection.Aggregate().Match(expression)
.Project(data => new
{
Id = data.Id,
Name = data.Name,
Amount = data.NetAmount
})
.Group(
key => new { key.Id, key.Name },
grouping => new
{
IdAndName = grouping.Key,
GroupTotalAmount = grouping.Sum(obj => obj.Amount)
})
.Project(arg => new
{
Id = arg.IdAndName.Id,
Name = arg.IdAndName.Name,
Amount = arg.GroupTotalAmount
});
如果我使用1
代替obj.Amount
,则在上面的代码段中,我会获得分组集合的计数。
此外,如果我只是在管道中没有组进行投影,我可以看到为每个文档填充Amount
值。
这是我在上面代码中的expression
:
Expression<Func<MyObject, bool>> expression = data => data.PropertyA == 55 && data.PropertyB == 2000;
任何帮助都将受到高度赞赏。感谢。