Всегда ли MongoDB Map / Reduce возвращает результаты с плавающей точкой? - PullRequest
3 голосов
/ 17 сентября 2010

Я использую Mongoid, который находится поверх драйвера Ruby MongDB.Несмотря на то, что эмиттер моей карты выдает parseInt(num), а возвращение Реду дает также parseInt(num), окончательные результаты все еще являются числами с плавающей запятой.

Это специфично для MongoDB?Есть ли способ сделать это целым вместо этого?

1 Ответ

5 голосов
/ 17 сентября 2010

Функция parseInt официально принимает строку в качестве параметра.Эта строка анализируется, как если бы она была целым числом, игнорируя все после первого нечислового символа.Если вы предоставите число с плавающей запятой, оно будет преобразовано в строку перед его анализом.

Функции parseInt возвращают Number, а не целое число.Number - это только числовой тип данных в JavaScript;нет различий между целыми числами и числами с плавающей точкой.

Так что, хотя parseInt удалит все десятичные дроби, тип данных не изменится.Поэтому Mongoid не знает, следует ли рассматривать результат как число с плавающей точкой или целое число.Вы несете ответственность за преобразование результата в целое число, как вы можете видеть в этом примере .

Обновление

Я столкнулся с NumberLong*Тип 1024 *, представляющий 64-разрядное целое число.Если вы вернете new NumberLong(num) из своей функции приведения, Mongoid может рассматривать его как целочисленный тип.

Обратите внимание, что вам понадобится MongoDB 1.6 для этого для работы в оболочке MongoDB.Я не знаю, поддерживает ли Mongoid это.

...