无法汇总所有 Int32 字段值
Can't sum up all Int32 field values
我有一个 mongo 数据库集合,其中包含这样的文档
我只需要计算所有文档的"debt"字段的总和。但我不知道怎么做。
官方文档似乎太晦涩,根本没有帮助,因为完全没有关于如何使用 C# 驱动程序 3.6+
的信息
我看到这个帖子
并尝试像这样使用 Sum()
的方法:
var result = m_Counterparties.AsQueryable()
.Where(x => !x[CounterpartyFields.ID].Equals(ObjectId.Empty))
.Sum(x => x[CounterpartyFields.DEBT].AsInt32);
WriteLine(result);
结果我总是得到 0,但你可以看到它必须至少为 100
所以这里的问题是 MongoDB C# 驱动程序需要将您的 lambda 表达式转换为聚合。您可以 运行 a profiler 来观察它是如何翻译的。所以你的代码:
x => x[CounterpartyFields.DEBT].AsInt32
翻译成:
{
"$group" : {
"_id" : 1,
"__result" : {
"$sum" : "$debt.AsInt32"
}
}
}
这不是您要找的。
要解决这个问题,您应该摆脱 AsInt32
并使其可编译,您可以使用以下代码:
.Sum(x => (int)x[CounterpartyFields.DEBT]);
我有一个 mongo 数据库集合,其中包含这样的文档
我只需要计算所有文档的"debt"字段的总和。但我不知道怎么做。 官方文档似乎太晦涩,根本没有帮助,因为完全没有关于如何使用 C# 驱动程序 3.6+
的信息我看到这个帖子 Sum()
的方法:
var result = m_Counterparties.AsQueryable()
.Where(x => !x[CounterpartyFields.ID].Equals(ObjectId.Empty))
.Sum(x => x[CounterpartyFields.DEBT].AsInt32);
WriteLine(result);
结果我总是得到 0,但你可以看到它必须至少为 100
所以这里的问题是 MongoDB C# 驱动程序需要将您的 lambda 表达式转换为聚合。您可以 运行 a profiler 来观察它是如何翻译的。所以你的代码:
x => x[CounterpartyFields.DEBT].AsInt32
翻译成:
{
"$group" : {
"_id" : 1,
"__result" : {
"$sum" : "$debt.AsInt32"
}
}
}
这不是您要找的。
要解决这个问题,您应该摆脱 AsInt32
并使其可编译,您可以使用以下代码:
.Sum(x => (int)x[CounterpartyFields.DEBT]);