MongoDB: переименовать поле в коллекции (документ и вложенные документы) - PullRequest
1 голос
/ 24 сентября 2019

Использование MongoDB 3.6 У меня есть структура документа, как показано ниже: *

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

Я хочу переименовать поле из AssetID / AssetId в Asset_ID на всех уровнях.Как я могу сделать это с оболочкой монго.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Для этого нужно сделать скрипт.
Я не проверял его.Внесите изменения соответственно.

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);
  });
1 голос
/ 24 сентября 2019

Следующий код может помочь:

// Getting all documents from the collection
var data = db.collection.find({},{"_id":0}).toArray();

// Converting the data into JSON string
var string = JSON.stringify(data);

// Replacing all variations of assetid with Asset_ID
string = string.replace(/assetid/ig,"Asset_ID");

// Removing existing documents from collection
db.collection.remove({});

// Converting the string back to JSON array and inserting it into the DB
db.collection.insertMany(JSON.parse(string));

До:

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

После:

{
    "_id" : ObjectId("5d89eea80558a18dd9cfc03b"),
    "Equipments" : [
        {
            "InnerEquipments" : {
                "Asset_ID" : 678
            },
            "Asset_ID" : 456
        }
    ],
    "Asset_ID" : 123
}
...