daydreamer
daydreamer

Reputation: 92169

MongoDB inserts float when trying to insert integer

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

How do I get Mongo to insert an integer?

Thank you

Upvotes: 280

Views: 174069

Answers (4)

Ethan. Zhang
Ethan. Zhang

Reputation: 71

If the value type is already double, then update the value with $set command can not change the value type double to int when using NumberInt() or NumberLong() function. So, to Change the value type, it must update the whole record.

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

Upvotes: 7

Grid Trekkor
Grid Trekkor

Reputation: 1473

A slightly simpler syntax (in Robomongo at least) worked for me:

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

Upvotes: 25

Christian Horsdal
Christian Horsdal

Reputation: 4932

Well, it's JavaScript, so what you have in 'value' is a Number, which can be an integer or a float. But there's not really a difference in JavaScript. From Learning JavaScript:

The Number Data Type

Number data types in JavaScript are floating-point numbers, but they may or may not have a fractional component. If they don’t have a decimal point or fractional component, they’re treated as integers—base-10 whole numbers in a range of –253 to 253.

Upvotes: -15

Bernie Hackett
Bernie Hackett

Reputation: 8909

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

You can also use NumberLong.

Upvotes: 432

Related Questions