C# MongoDB(v3.2.4)Fluent-聚合组总和始终为0
我试图过滤集合中数百万个文档,然后对其中一个属性应用分组。我需要知道财产总额。我已经编写了以下代码,但是总和似乎始终为0,即使集合中的每个文档中都存在金额C# MongoDB(v3.2.4)Fluent-聚合组总和始终为0,c#,mongodb,fluent,C#,Mongodb,Fluent,我试图过滤集合中数百万个文档,然后对其中一个属性应用分组。我需要知道财产总额。我已经编写了以下代码,但是总和似乎始终为0,即使集合中的每个文档中都存在金额 var results = collection.Aggregate().Match(expression) .Project(data => new { Id = data.Id, Name = data.Name,
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
,在上面的代码片段中,我将获得分组集合的计数
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
});
此外,如果我只是在管道中没有组的情况下进行项目,我可以看到为每个文档填充的Amount
值
这是我在上述代码中的表达式
:
Expression<Func<MyObject, bool>> expression = data => data.PropertyA == 55 && data.PropertyB == 2000;
Expression=data=>data.PropertyA==55&&data.PropertyB==2000;
任何帮助都将不胜感激。谢谢。请用一些示例文档和最小可验证代码更新帖子。很可能您的“金额”数据实际上是一个“字符串”,因此无法“数字”求和。您需要更改数据,以便“应该”是数字的东西实际上是。@NeilLunn-金额是十进制类型的,文档中的净金额也是十进制的。我看到它时会相信的。由于
$sum
而产生的0
通常是数据集中某个位置非数字数据的指示器。“告诉”我们这就是你所拥有的一切是很好的,但是在你展示给我们之前解决你的问题是没有用的。您的问题是根据要求包括存储的文档详细信息,并检查您的集合,以查看NetAmount
属性中的所有数据实际上都是数字。包括您的MongoDB服务器版本,因为这也是相关的。@NeilLunn我实际上发现了,您是对的,类型导致了问题。我在C#端使用了decimal类型,但文档将其存储为字符串。我目前正在使用JavaScript shell命令更新文档中金额的类型。想知道为什么MongoDB不支持十进制C#类型。