MongoDB在尝试插入整数时插入浮点

MongoDB在尝试插入整数时插入浮点,mongodb,Mongodb,如何让Mongo插入一个整数 谢谢这是JavaScript,所以“value”中的数字可以是整数或浮点。但是JavaScript并没有真正的区别。发件人: 数字数据类型 JavaScript中的数字数据类型是浮点数,但它们可能有也可能没有小数部分。如果它们没有小数点或小数部分,它们将被视为-253到253范围内的以10为基数的整数 您也可以使用NumberLong。一个稍微简单一点的语法(至少在Robomongo中)对我有用: db.data.update({'name': 'zero'}, {

如何让Mongo插入一个整数


谢谢

这是JavaScript,所以“value”中的数字可以是整数或浮点。但是JavaScript并没有真正的区别。发件人:

数字数据类型

JavaScript中的数字数据类型是浮点数,但它们可能有也可能没有小数部分。如果它们没有小数点或小数部分,它们将被视为-253到253范围内的以10为基数的整数

您也可以使用NumberLong。

一个稍微简单一点的语法(至少在Robomongo中)对我有用:

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

如果值类型已经是double,则在使用NumberInt()或NumberLong()函数时,使用$set命令更新值不能将值类型double更改为int。 因此,要更改值类型,它必须更新整个记录

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

但在findOne中,它表示NumberLong(0)不是默认的0,mongo shell将所有数字都视为浮点值。因此,我们需要明确指定要使用的数字类型,例如numberrint或NumberLong。我有个问题。NumberPrint仅在mongo shell中提供,如何在node.js等JavaScript语言中实现这一点?@Shawyeok这里有一个答案,必须考虑到int有边界。如果数字很大,请考虑使用MyDoLon MunGDB版本,请注意,在我的例子中,当我想{$SET:{Val:NUMBITEN(0)}}在一些已经设置了很长时间的“VALL”时,它没有改变它。我必须先将其更改为其他值,然后再将其更改回0,以使NumberPrint(0)生效我也有同样的问题,在意识到我错误地将int32更改为double后,使用NumberPrint()将其设置回并没有修复该类型,除非我首先更改为其他值。实际上,这不是真的。虽然JS没有看到差异,但只要你从另一种语言(如java)连接到mongo,你就会感觉到差异。我的应用程序在不同的点上出现故障,原因只有一个,int被保存并作为float返回。我怀疑原因可能是我通过使用javascript的mongo shell进行的一些手动插入。
$set
至少在mongo 4.2中起作用,所以这可能是一个bug。
db.database.save({ Year : NumberInt(2015) });
var re = db.data.find({"name": "zero"})
re['value']=NumberInt(0)
db.data.update({"name": "zero"}, re)