我试图更新一个长整数的文档中的字段。但它更新为值'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
}
)