Не удается суммировать все значения полей Int32 - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть коллекция дд монго с такими документами enter image description here

Все, что мне нужно, - это подсчитать общую сумму полей «задолженность» всех документов.Но я понятия не имею, как это сделать.Официальные документы кажутся слишком неясными и совсем не помогают, потому что нет абсолютно никакой информации о том, как использовать драйвер C # 3.6 +

. Я наткнулся на эту тему C # Mongodb.Поле суммы для всех документов и попытался использовать подход с Sum() следующим образом:

var result = m_Counterparties.AsQueryable()
                .Where(x => !x[CounterpartyFields.ID].Equals(ObjectId.Empty))
                .Sum(x => x[CounterpartyFields.DEBT].AsInt32);
             WriteLine(result);  

, и я всегда получаю 0 в результате, но вы можете видеть, что это должно быть не менее 100

1 Ответ

0 голосов
/ 21 февраля 2019

Таким образом, проблема в том, что драйвер MongoDB C # должен преобразовывать ваше лямбда-выражение в агрегацию.Вы можете запустить profiler , чтобы посмотреть, как он переводится.Итак, ваш код с:

x => x[CounterpartyFields.DEBT].AsInt32

переведен на:

{
    "$group" : {
        "_id" : 1,
        "__result" : {
            "$sum" : "$debt.AsInt32"
        }
    }
}

И это не то, что вы ищете.

Чтобы исправить это, вы должны получитьизбавиться от AsInt32 и сделать его компилируемым, вы можете использовать следующий код:

.Sum(x => (int)x[CounterpartyFields.DEBT]);
...