【问题标题】:long number is not updating properly in mongodb长号在 mongodb 中没有正确更新
【发布时间】:2018-09-10 20:48:27
【问题描述】:

我尝试更新文档中的长整数字段。但它已更新为值“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


    【解决方案1】:

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

    这应该可以按预期工作。

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

    只是为了演示。

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

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

    【讨论】:

      【解决方案2】:

      这里是查询条件中的一个示例

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

      【讨论】:

        猜你喜欢
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多