mongodb 中的长号码未正确更新

long number is not updating properly in mongodb

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

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

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

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

有什么解决办法吗?我正在使用 robomongo 0.9.0.

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

这应该按预期工作。

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

只是为了举例说明。

因此,当将 14818435007969199 转换为以 2 为基数的二进制值时,您会得到 110100101001010100100111000010110001101111011110110000,而当转换回以 10 为基数时,则为 14818435007969200

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

这是一个在查询中使用 where 条件的示例

 db.CustomerRatibs.update(
    { custRatibId:'8b19bfdbac7b468b9c3edafc37ad5409' },
    { $set:
       {
        uAt : NumberLong(1536581726000)
       }
    },
    {
        multi:false
    }
 )