MongoDB вставляет float при попытке вставить целое число - PullRequest
173 голосов
/ 22 ноября 2011
   > db.data.update({'name': 'zero'}, {'$set': {'value': 0}}) 
   > db.data.findOne({'name': 'zero})
    {'name': 'zero', 'value': 0.0}  

Как мне заставить Монго вставить целое число?

Спасибо

Ответы [ 4 ]

276 голосов
/ 22 ноября 2011
db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}})

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

14 голосов
/ 03 ноября 2015

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

db.database.save({ Year : NumberInt(2015) });
4 голосов
/ 17 мая 2017

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

var re = db.data.find({"name": "zero"})
re['value']=NumberInt(0)
db.data.update({"name": "zero"}, re)
0 голосов
/ 22 ноября 2011

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

Тип данных числа

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

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