首页 > 解决方案 > MongoDB:重命名集合中的字段(文档和子文档)

问题描述

使用 MongoDB 3.6,我的文档结构如下 `

{
    "_id" : ObjectId("5d88"),
    "Equipments" : [ 
        {
            "InnerEquipments" : {
                "AssetId" : 678
            },
            "AssetID" : 456
        }
    ],
    "AssetID" : 123
}

我想在所有级别将字段从 AssetID/AssetId 重命名为 Asset_ID。我怎么能用 mongo shell 做到这一点。

标签: mongodbmongodb-querymongo-shell

解决方案


你需要为此编写一个脚本。
我还没有测试过。相应地进行更改。

db.collection.find({}).forEach(function(doc) {
    if(doc['AssetID']) {
      doc['Asset_ID'] = doc['AssetID'];
      delete doc['AssetID'];
    } else if (doc['AssetId']) {
      doc['Asset_ID'] = doc['AssetId'];
      delete doc['AssetId']
    }
    if(doc.Equipments && doc.Equipments.length) {
      doc.Equipments.forEach(function(rec) {
        if(rec['AssetID']) {
          rec['Asset_ID'] = rec['AssetID'];
          delete rec['AssetID'];
        } else if (rec['AssetId']) {
          rec['Asset_ID'] = rec['AssetId'];
          delete rec['AssetId']
        }

        if(rec['InnerEquipments']['AssetID']) {
          rec['InnerEquipments']['Asset_ID'] = rec['InnerEquipments']['AssetID'];
          delete rec['InnerEquipments']['AssetID'];
        } else if (rec['InnerEquipments']['AssetId']) {
          rec['InnerEquipments']['Asset_ID'] = rec['InnerEquipments']['AssetId'];
          delete rec['InnerEquipments']['AssetId']
        }
      })
    }
    db.collection.update({'_id':doc._id},doc);
  });

推荐阅读