【问题标题】:Create multiple new fields from values in other fields on all documents in a MongoDB Collection从 MongoDB 集合中所有文档的其他字段中的值创建多个新字段
【发布时间】:2021-06-15 02:11:45
【问题描述】:

我在集合中的 mongoDB 文档上有几个数据问题。我正在尝试编写一个 db.collection.updateAll 脚本来更新文档,但无论我做什么,我似乎都无法让它工作。

我想将存储在 data.date 中的文本字符串从字符串转换为:

“数据”:{ “日期”:“2019-01-07T00:00:00.000Z” }

进入 ISO 日期。

我想获取 _id 字段,并将其复制到一个名为“id”的字段中,我知道这可能看起来很愚蠢,但是我们的一些报告中有一个错误,我无法在其中获取代码更新几周,因此通过“id”和“_id”字段提供数据将停止服务台呼叫,直到我得到适当的修复。

我一直在尝试这个:

db.getCollection("myCollection").updateMany({}, 
    [{
       "$set": {
           { "id" : ["$_id"] } ,
                   "$data.date": {
                     "$dateFromString": {
                        dateString: '$data.date'
                     }
           }
       }
    }]
);

但是两个字段都没有设置。当我单独运行两个 $sets 时,我收到以下错误消息...

当我尝试设置“id”时:

db.getCollection("myCollection").updateMany(
      {},
      { $set: { "id" : ["$_id"] } }
   );

它只是将值设置为“$_id”,而不是从 _id 字段中获取值。

如果我尝试设置日期字段

db.getCollection("myCollection").updateMany(
      {},
      { $set: {  "$data.date": {
                     "$dateFromString": {
                        dateString: '$data.date'
                     }
           } } }
   );

我收到错误消息:

“$data”中的美元($)前缀字段“$data”对存储无效。

我可以在网上找到的所有示例都显示了如何设置文字值,但似乎没有一个有助于从字段本身获取新值。

【问题讨论】:

  • 你的 mongoDB 版本是多少?

标签: mongodb mongo-shell


【解决方案1】:

在这里尝试它应该可以工作,因为您正在尝试添加新字段,因此请使用$addFields。适用于 mongoDb 4.2

db.test.updateMany({}, 
   [  {
        $addFields:{
           id:'$_id',
           'data.date':{$toDate:'$data.date'}
        }
      }
   ]
)

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 2022-12-20
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多