MongoDB вставляет float при попытке вставить целое число

   > db.data.update({'name': 'zero'}, {'$set': {'value': 0}}) 
   > db.data.findOne({'name': 'zero})
    {'name': 'zero', 'value': 0.0}  

Как заставить Mongo вставить целое число?

Спасибо

Ответ 1

db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}})

Вы также можете использовать NumberLong.

Ответ 2

Несколько более простой синтаксис (по крайней мере, в Robomongo) работал у меня:

db.database.save({ Year : NumberInt(2015) });

Ответ 3

Если тип значения уже двойной, то обновление значения с помощью команды $set не может изменить тип значения double на int при использовании функции NumberInt() или NumberLong(). Итак, чтобы изменить тип значения, он должен обновить всю запись.

var re = db.data.find({"name": "zero"})
re['value']=NumberInt(0)
db.data.update({"name": "zero"}, re)

Ответ 4

Ну, это JavaScript, так что у вас в "значении" есть Number, который может быть целым или плавающим. Но в JavaScript нет никакой разницы. Из Изучение JavaScript:

Тип данных данных

Число типов данных в JavaScript - это числа с плавающей запятой, но они могут иметь или не иметь дробный компонент. Если они не имеют десятичной точки или дробной составляющей, theyre рассматривается как целые числа целых чисел-base-10 в диапазоне от -2 53 до 2 53.