Длинный аккумулятор вместо Double в функции MongoDB group () - PullRequest
2 голосов
/ 16 февраля 2012

Я использую MongoDB через официальный Java API. Я могу хранить и получать значения Long без каких-либо дополнительных усилий. Но когда я пытаюсь накапливать эти значения с помощью функции group(), интерпретатор JavaScript преобразует все в двойные, и в результате получается двойной.

Вот моя групповая команда:

{
    ...
    initial: { count: 0 },
    reduce: "function (o, a) { a.count += o.count; }"
}

Есть ли способ сказать переводчику, что count на самом деле является длинным? Что-то вроде count: 0L или count: Long(0)? Или я должен делать накопление на стороне Java?

1 Ответ

2 голосов
/ 16 февраля 2012

Это потому, что групповая команда на самом деле запускает карту / уменьшить, а карта / уменьшить это javascript.В javascript тип числа по умолчанию - double, из-за этого он возвращает doubles.

Так что вы, вероятно, можете заключить свои числа в NumberLong(..), если хотите видеть long в результате команды группы:

{
    ...
    initial: { count: new NumberLong(0) },
    reduce: "function (o, a) { a.count += new NumberLong(o.count); }"
}

Не проверял это, но почти уверен, что это должно работать.

...