无法汇总所有 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]);