在mongodb中,长号码没有正确更新

问题描述 投票:1回答:2

我试图更新一个长整数的文档中的字段。但它更新为值'14818435007969200'而不是'14818435007969199'。

db.getCollection('title').updateMany({},
{$set:{'skillId':[NumberLong(14818435007969199)]}})

db.getCollection('title').find({})

{
    "_id" : ObjectId("5853351c0274072315da2426"),
    "skillId" : [ 
        NumberLong(14818435007969200)
    ]
}

有什么解决方案吗?我正在使用robomongo 0.9.0。

mongodb robo3t
2个回答
2
投票

mongo shell将所有数字视为浮点值。因此,使用NumberLong()包装器时,将long值作为字符串传递,否则会导致精度损失或转换不匹配。

这应该按预期工作。

db.getCollection('title').updateMany({},
{$set:{'skillId':[NumberLong("14818435007969199")]}})

仅举例说明。

因此,当将14818435007969199转换为二进制基数2时,你会得到110100101001010100100111000010110001101111011110110000,当转换回基数为10时,14818435007969200

您可以查看floating point arithmetic了解更多详情。


0
投票

这是查询中where条件的示例

 db.CustomerRatibs.update(
    { custRatibId:'8b19bfdbac7b468b9c3edafc37ad5409' },
    { $set:
       {
        uAt : NumberLong(1536581726000)
       }
    },
    {
        multi:false
    }
 )
© www.soinside.com 2019 - 2024. All rights reserved.