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

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

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

Спасибо

  • 0
    какую версию mongodb вы используете?
  • 0
    Я использую 1.8.1
Показать ещё 3 комментария
Теги:

4 ответа

174
Лучший ответ
db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}})

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

  • 0
    но в findOne это говорит NumberLong (0) не как 0
  • 7
    По умолчанию оболочка mongo обрабатывает все числа как значения с плавающей запятой. Поэтому нам нужно явно указать, какой тип числа мы хотим использовать, например, NumberInt или NumberLong. docs.mongodb.org/manual/core/shell-types
Показать ещё 4 комментария
7

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

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

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

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

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

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

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

  • 23
    На самом деле это не так. Хотя JS не видит разницы, как только вы подключитесь к монго с другого языка (например, Java), вы почувствуете разницу.
  • 1
    Мое приложение сломалось в разных точках только по одной причине, int сохраняется и возвращается как float. Я подозреваю, что причиной должны быть некоторые ручные вставки, которые я сделал через оболочку mongo, которая использует javascript.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню