这可能是一个愚蠢的问题,但我很难在mongoDB文档中保存一个大数字。
基本上,我想保存一个可能大于max int值的数字。因此,我将我的文档字段声明为@Field(type="float")
。
现在的问题是保存数字会导致错误。我也试过简单地使用@Integer
,但数字减少为 2147483647 (这是32位系统的最大int值)。
所以我尝试了最后一个解决方案,将我的号码保存在字符串中。这样可以正常工作(至少在数据库中看起来是正确的),但是返回文档并执行echo $number
会让我回到 2147483647 。
有人对此有解决方法吗?我做错了什么?
答案 0 :(得分:1)
最后的事情:该值显示为max-int值,因为PHP将其视为数字。您可以详细了解此流程here。
mongodb扩展本身使用MongoInt64支持32位系统上的64位整数,但是当从MongoDB补充时,Doctrine ODM不能以不同的方式处理32位或64位整数,所以你'永远不会看到64位值作为MongoInt64
类返回,即使PHP可以支持它 - 它也不能:)
所以,我会说你的选项要么强制将值转换为字符串(echo (String) $number;
),要么尝试解决为什么在尝试将值保存为float时出错的原因。 php中存在带有浮点数的精度issues,无论如何都可能无法存储数字。
希望这有帮助!