首页 > 解决方案 > MongoDB Shell - 将新字段添加到现有字段中的所有文档

问题描述

我想为集合中的所有现有文档创建一个 TTL,我们在所有文档中都有一个字符串类型的字段 -"OrigDate": "2020-03-24"

现在我想根据这个字段添加另一个提交的“updatedAt”,我在 mongo shell 中尝试了以下但没有工作 -

db.SHOP.update(
    {},
    {
     $set:{
            "updatedAt": { "$toDate": "$OrigDate"}
        }
    },
    false,
    true
)

这给出了以下例外 - 'updatedAt.$toDate' 中的美元 ($) 前缀字段 '$toDate' 对存储无效

请帮忙

标签: mongodbmongodb-query

解决方案


使用聚合从现有字段值生成新字段,然后将其更新到集合中。您必须使用聚合来引用集合文档中的现有字段。

db.test.aggregate( [
  { $addFields: { updatedAt: { "$toDate": "$OrigDate"} } }
] ).forEach( doc => db.test.updateOne( { _id: doc._id }, { $set: { updatedAt: doc.updatedAt } } ) )

以下更新接受一个聚合管道来指定要应用于集合文档的修改:使用聚合管道更新。请注意,此功能仅适用于 MongoDB 版本 4.2 或更高版本。

db.test.updateMany(
  { },
  [
      { $set: { updatedAt: { "$toDate": "$OrigDate"} } }
  ]
)

推荐阅读