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

MongoDB Shell中NumberLong(9007199254740993)为何与NumberLong(9007199254740992)匹配?

关于大数值下NumberLong匹配异常的问题

这其实是JavaScript(以及很多依赖双精度浮点数的环境)的精度限制引发的问题,当数值超过9007199254740992(也就是2^53,这是双精度浮点数能精确表示的最大整数)时,就会出现你遇到的情况:

  • 不止NumberLong(9007199254740996)会匹配NumberLong("9007199254740996"),相邻的NumberLong(9007199254740995)和NumberLong(9007199254740997)也会匹配同一个值
  • 这种情况会直接导致业务上的麻烦:当你想要通过数值操作某条特定记录时,用三个不同的相邻数值居然都能获取到同一条记录

背后的原因很直观:双精度浮点数的有效存储位数只有53位,超过这个范围后,连续的整数无法被精确区分——多个相邻整数会被映射成同一个浮点数。而MongoDB的NumberLong类型在和JavaScript数值交互时,就会触发这种精度丢失导致的匹配异常。

内容的提问来源于stack exchange,提问作者Minix Li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:07:45