Функция parseInt
официально принимает строку в качестве параметра.Эта строка анализируется, как если бы она была целым числом, игнорируя все после первого нечислового символа.Если вы предоставите число с плавающей запятой, оно будет преобразовано в строку перед его анализом.
Функции parseInt
возвращают Number
, а не целое число.Number
- это только числовой тип данных в JavaScript;нет различий между целыми числами и числами с плавающей точкой.
Так что, хотя parseInt
удалит все десятичные дроби, тип данных не изменится.Поэтому Mongoid не знает, следует ли рассматривать результат как число с плавающей точкой или целое число.Вы несете ответственность за преобразование результата в целое число, как вы можете видеть в этом примере .
Обновление
Я столкнулся с NumberLong
*Тип 1024 *, представляющий 64-разрядное целое число.Если вы вернете new NumberLong(num)
из своей функции приведения, Mongoid может рассматривать его как целочисленный тип.
Обратите внимание, что вам понадобится MongoDB 1.6 для этого для работы в оболочке MongoDB.Я не знаю, поддерживает ли Mongoid это.