Арифметика NumberLong в оболочке Монго - PullRequest
4 голосов
/ 21 декабря 2011

Как выполнить точную арифметику со значениями NumberLong в оболочке Mongo?Насколько я понимаю, Javascript имеет только один числовой тип - number - обычно ограниченный 54-битной точностью с плавающей точкой.

Прямая арифметика с использованием (например) стандартного сложения показывает приведение приведения к типу с более низкой точностью:

> NumberLong("123456789012345678")+NumberLong("1") 
123456789012345680
> NumberLong("123456789012345678")+NumberLong("2")
123456789012345680

Я вижу, как извлечь части NumberLong, используя строковые представления, но это кажется неэффективными не используется для таких арифметических операций, как увеличение или деление.

1 Ответ

2 голосов
/ 21 декабря 2011

MongoDB использует 6400-битный тип BSON ( код типа Монго 18 ) для NumberLong. Ядро db может выполнять точную арифметику с этими элементами (ядро написано на C ++) с помощью операций обновления, но если вы хотите сделать это в оболочке javascript, вам понадобится библиотека типа эта от Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...