You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:42:00