MongoDB - 更新字段的数据类型

use*_*872 2 mongodb

数据插入如下。

{“键1”:20.05,“键2”:21.24 }

它应该存储为 Double,但该值存储为 String,并且当返回文档时,该值是,

{“key1”:“20.05”,“key2”:“21.24”}

是否有办法将数据类型更新为双倍而不扫描每个文档?

Lao*_*tih 8

笔记

默认情况下,除非通常过度转换,否则所有内容numbers都存储在 MongoDB 中。double

参考: /sf/answers/2188733081/


MongoDB 4.2 版本以上

您可以通过聚合更新字段的类型数据。$key2下面是将字段中的数据类型更改为 的聚合查询示例double

db.collection.aggregate([
  {
    $set: {
      key2: { $toDouble: '$key2' },
    },
  },
])
Run Code Online (Sandbox Code Playgroud)

如果要转换的数据double无法更改(例如:“4Bn”),则会出现错误。为了防止这种情况,您可以使用名为$convert的附加运算符。

参考: $toDouble


MongoDB 3.2 版本以上

在此版本中,MongoDB 尚不支持$set聚合运算符。因此,您必须使用findforEach和手动执行此操作updateOne

使用外壳的示例mongo

db.collection.find({}).forEach(function (doc) {
  db.collection.updateOne(
    {
      _id: doc._id,
    },
    {
      $set: {
        key2: NumberInt(doc.key2),
      },
    }
  )
})
Run Code Online (Sandbox Code Playgroud)

参考: NumberInt