代码之家  ›  专栏  ›  技术社区  ›  user1578872

MongoDB-更新字段的数据类型

  •  0
  • user1578872  · 技术社区  · 4 年前

    数据插入如下。

    {key1:20.05,key2:21.24}

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

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

    是否仍然可以在不扫描每个文档的情况下将数据类型更新为双倍?

    0 回复  |  直到 4 年前
        1
  •  5
  •   Laode Muhammad Al Fatih    4 年前

    笔记

    默认情况下,所有 numbers 存储为 double 在MongoDB中,除非通常过度使用。

    参考: https://stackoverflow.com/a/31267615/10861398


    MongoDB 4.2以上版本

    可以使用聚合更新字段的类型数据。下面是一个聚合查询的示例,用于更改 $key2 场到 双重的 .

    db.collection.aggregate([
      {
        $set: {
          key2: { $toDouble: '$key2' },
        },
      },
    ])
    

    如果要将数据转换为 双重的 无法转换(例如:“40亿”),将发生错误。为了防止这种情况,您可以使用一个额外的运算符 $convert .

    参考: $toDouble


    MongoDB 3.2以上版本

    在这个版本中,MongoDB还不支持运算符 $set 总体而言。所以你必须用手工操作 find , forEach updateOne .

    示例使用 mongo 壳牌:

    db.collection.find({}).forEach(function (doc) {
      db.collection.updateOne(
        {
          _id: doc._id,
        },
        {
          $set: {
            key2: NumberInt(doc.key2),
          },
        }
      )
    })
    

    参考: NumberInt