主义ODM节省大数

时间:2016-01-08 22:53:21

标签: mongodb symfony doctrine-orm integer

这可能是一个愚蠢的问题,但我很难在mongoDB文档中保存一个大数字。

基本上,我想保存一个可能大于max int值的数字。因此,我将我的文档字段声明为@Field(type="float")

现在的问题是保存数字会导致错误。我也试过简单地使用@Integer,但数字减少为 2147483647 (这是32位系统的最大int值)。

所以我尝试了最后一个解决方案,将我的号码保存在字符串中。这样可以正常工作(至少在数据库中看起来是正确的),但是返回文档并执行echo $number会让我回到 2147483647

有人对此有解决方法吗?我做错了什么?

1 个答案:

答案 0 :(得分:1)

最后的事情:该值显示为max-int值,因为PHP将其视为数字。您可以详细了解此流程here

mongodb扩展本身使用MongoInt64支持32位系统上的64位整数,但是当从MongoDB补充时,Doctrine ODM不能以不同的方式处理32位或64位整数,所以你'永远不会看到64位值作为MongoInt64类返回,即使PHP可以支持它 - 它也不能:)

所以,我会说你的选项要么强制将值转换为字符串(echo (String) $number;),要么尝试解决为什么在尝试将值保存为float时出错的原因。 php中存在带有浮点数的精度issues,无论如何都可能无法存储数字。

希望这有帮助!