복붙노트

[MONGODB] 어떻게 MongoDB의 모든 문서에 대한 필드 이름을 바꿀 수 있습니다?

MONGODB

어떻게 MongoDB의 모든 문서에 대한 필드 이름을 바꿀 수 있습니다?

나는 5000 개 기록, 유사 각각 포함 뭔가 MongoDB를의 컬렉션이 가정 :

{
"occupation":"Doctor",
"name": {
   "first":"Jimmy",
   "additional":"Smith"
}

모든 문서의 필드 "마지막"을 "추가"를 이름을 변경하는 쉬운 방법이 있나요? 나는 문서의 $ 이름 변경 연산자를 보았다하지만 서브 필드를 지정하는 방법에 대한 정말 명확하지 않다.

해결법

  1. ==============================

    1.당신이 사용할 수있는:

    당신이 사용할 수있는:

    db.foo.update({}, {$rename:{"name.additional":"name.last"}}, false, true);
    

    또는 그냥 속성을 포함하는 문서를 업데이트 :

    db.foo.update({"name.additional": {$exists: true}}, {$rename:{"name.additional":"name.last"}}, false, true);
    

    위의 방법에서 진정한 거짓은 다음과 같습니다 {upsert : 멀티, 거짓 : TRUE}. 모든 레코드를 업데이트 할 사실 : 당신은 다중이 필요합니다.

    아니면 이전의 방법을 사용할 수 있습니다 :

    remap = function (x) {
      if (x.additional){
        db.foo.update({_id:x._id}, {$set:{"name.last":x.name.additional}, $unset:{"name.additional":1}});
      }
    }
    
    db.foo.find().forEach(remap);
    

    MongoDB를 3.2에서 당신은 또한 사용할 수 있습니다

    db.students.updateMany( {}, { $rename: { "oldname": "newname" } } )
    

    이러한 일반적인 구문은

    db.collection.updateMany(filter, update, options)
    

    https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/

  2. ==============================

    2.시도하십시오 db.collectionName.update ({}, {$ 이름 바꾸기 : { 'name.additional': 'name.last'}}, {멀티 : TRUE})

    시도하십시오 db.collectionName.update ({}, {$ 이름 바꾸기 : { 'name.additional': 'name.last'}}, {멀티 : TRUE})

    이 읽기 : http://docs.mongodb.org/manual/reference/operator/rename/#_S_rename

  3. ==============================

    3.당신이 mongoid과 같은 일을 할 필요가 어느 경우 :

    당신이 mongoid과 같은 일을 할 필요가 어느 경우 :

    Model.all.rename(:old_field, :new_field)
    

    최신 정보

    monogoid 4.0.0에서 구문의 변화가있다 :

    Model.all.rename(old_field: :new_field)
    
  4. ==============================

    4.누구나 잠재적으로 (어떤 _id를 사용하지 않음으로써) 컬렉션에서 필드의 이름을 바꾸려면이 명령을 사용할 수 있습니다 :

    누구나 잠재적으로 (어떤 _id를 사용하지 않음으로써) 컬렉션에서 필드의 이름을 바꾸려면이 명령을 사용할 수 있습니다 :

    dbName.collectionName.update({}, {$rename:{"oldFieldName":"newFieldName"}}, false, true);
    

    참고 참조

  5. ==============================

    5.@Felix 얀은 이전의 방법은 내가 다른 snipets 몇 가지 문제가이 도움이 되었으면 좋겠했다, 잘 작동하는 것 같다 언급 한 바와 같이이 nodejs 코드는 그냥 그렇게.

    @Felix 얀은 이전의 방법은 내가 다른 snipets 몇 가지 문제가이 도움이 되었으면 좋겠했다, 잘 작동하는 것 같다 언급 한 바와 같이이 nodejs 코드는 그냥 그렇게.

    이 이름을 변경합니다 열 "oldColumnName는"테이블 "문서"의 "newColumnName"수하는

    var MongoClient = require('mongodb').MongoClient
      , assert = require('assert');
    
    // Connection URL
    //var url = 'mongodb://localhost:27017/myproject';
    var url = 'mongodb://myuser:mypwd@myserver.cloud.com:portNumber/databasename';
    
    // Use connect method to connect to the server
    MongoClient.connect(url, function(err, db) {
      assert.equal(null, err);
      console.log("Connected successfully to server");
    
      renameDBColumn(db, function() {
        db.close();
      });
    
    });
    
    //
    // This function should be used for renaming a field for all documents
    //
    var renameDBColumn = function(db, callback) {
      // Get the documents collection
      console.log("renaming database column of table documents");
      //use the former way:
      remap = function (x) {
        if (x.oldColumnName){
          db.collection('documents').update({_id:x._id}, {$set:{"newColumnName":x.oldColumnName}, $unset:{"oldColumnName":1}});
        }
      }
    
      db.collection('documents').find().forEach(remap);
      console.log("db table documents remap successfully!");
    }
    
  6. ==============================

    6.나는, 몽고 3.4.0을 사용하고 있습니다

    나는, 몽고 3.4.0을 사용하고 있습니다

    은 $ 이름 바꾸기 연산자는 필드의 이름을 업데이트하고 다음과 같은 형태를 가진다 :

    {$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
    

    에 대한 예 :

    db.getCollection('user').update( { _id: 1 }, { $rename: { 'fname': 'FirstName', 'lname': 'LastName' } } )
    

    새로운 필드 이름은 기존의 필드 이름과 달라야합니다. 포함 된 문서에 지정하려면 점 표기법을 사용합니다.

    이 작업은 컬렉션에있는 모든 문서에 대한 이름을 필드 이름을 이름을 변경합니다 :

    db.getCollection('user').updateMany( {}, { $rename: { "add": "Address" } } )
    
    db.getCollection('user').update({}, {$rename:{"name.first":"name.FirstName"}}, false, true);
    

    거짓 위의 방법에서, 사실은 다음과 같습니다 {upsert : 멀티, 거짓 : TRUE} 모든 레코드를 업데이트 .TO, 당신은 멀티 필요합니다 사실.

    임베디드 문서에 필드 이름 바꾸기

    db.getCollection('user').update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )
    

    사용 링크 : https://docs.mongodb.com/manual/reference/operator/update/rename/

  7. ==============================

    7.당신이 MongoMapper을 사용하는 경우이 작동합니다 :

    당신이 MongoMapper을 사용하는 경우이 작동합니다 :

    Access.collection.update( {}, { '$rename' => { 'location' => 'location_info' } }, :multi => true )
    
  8. from https://stackoverflow.com/questions/9254351/how-can-i-rename-a-field-for-all-documents-in-mongodb by cc-by-sa and MIT license