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