首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongodb中的嵌套对象数组中修改字段名/键?

如何在mongodb中的嵌套对象数组中修改字段名/键?
EN

Stack Overflow用户
提问于 2022-08-24 12:36:32
回答 2查看 28关注 0票数 2

我有一个mongodb集合,其中有许多对象,如下所示:

代码语言:javascript
复制
{
 "_id" : "1234", 
 "type" : "automatic", 
 "subtypes" : [
    {
     "_id" : "dfgd",
     "name" : "test subtype", 
     "subjetRequired" : true,
    },
    {
     "_id" : "dfgd",
     "name" : "test subtype2", 
     "subjetRequired" : false,
    }
  ],
 "anotherField" : "some value"
}

如您所见,subtypes数组中的一个键拼写错误-- "subjetRequired“而不是"subjectRequired”。

我想更正那个密钥名。我怎么能这么做。

首先,我要说,我过去没有使用过很多mongodb。

经过大量的研究,我能想到的最好的方法是:(这不管用):

代码语言:javascript
复制
function remap(doc) {
     subtypes = doc.subtypes;
     var count = 0;
     subtypes.forEach(function(subtype){
         db.taskType.update({"_id": subtype._id}, {
             $set: {"subtypes.subjectRequired" : subtype.subjetRequired},
             $unset: {"subtypes.subjetRequired": 1}
         });
     }
     )
}

db.taskType.find({"subtypes.subjetRequired":{$ne:null}}).forEach(remap);

这不管用。

我知道循环是正确的,就好像我用print语句替换了其他逻辑一样,我可以访问和打印想要修改的字段。

我在这里做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-24 12:43:21

您可以使用此更新并避免使用任何代码,它也是稳定的,因此您可以在不担心的情况下多次执行它。

代码语言:javascript
复制
db.collection.updateMany({
  "subtypes.subjetRequired": {
    $exists: true
  }
},
[
  {
    $set: {
      subtypes: {
        $map: {
          input: "$subtypes",
          in: {
            $mergeObjects: [
              "$$this",
              {
                subjectRequired: "$$this.subjetRequired",
                
              }
            ]
          }
        }
      }
    }
  },
  {
    $unset: "subtypes.subjetRequired"
  }
])

蒙戈游乐场

票数 1
EN

Stack Overflow用户

发布于 2022-08-24 12:43:10

我可以修改您的循环以覆盖整个子类型数组:

代码语言:javascript
复制
function remap(doc) {
  correctSubtypes = doc.subtypes.map(({ subjetRequired, ...rest }) => ({
    ...rest,
    subjectRequired: subjetRequired,
  }));
  var count = 0;
  db.taskType.findByIdAndUpdate(doc._id, {
    $set: {
      subtypes: correctSubtypes,
    },
  });
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73473302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档