MongoDB插入decimal数值被自动存储为Int32的问题咨询
问题原因
MongoDB默认插入JS原生数字类型时,会自动对数值做存储优化:如果浮点类型的数值实际为整数,会自动转换为Int32/Int64类型存储,因此你直接写入20.0会被转换为整数存储。
解决方法
若需要显式存储为Decimal128类型(MongoDB 3.4及以上版本支持),需要在插入时使用NumberDecimal()构造器显式声明类型,注意建议传入字符串格式的数值,避免原生浮点数精度问题:
// 正确插入Decimal类型的写法 db.col.insertOne({"test_number": NumberDecimal("20.0")})
插入后查询返回的结果格式如下,不会再被自动转换为Int32:
{ _id: ObjectId("613f3e8a36ed56de6e7f91a0"), test_number: Decimal128("20.0") }
不同开发语言驱动适配
如果使用编程语言SDK操作MongoDB,需要使用对应驱动内置的Decimal128类型封装数值:
- Python(pymongo):使用
bson.decimal128.Decimal128("20.0") - Java:使用
org.bson.types.Decimal128.parse("20.0") - Node.js:使用
mongodb.Decimal128.fromString("20.0")
内容的提问来源于stack exchange,提问作者milad_vayani
相关产品推荐
相关产品推荐

