답변:
당신이 사용할 수있는:
db.foo.update({}, {$rename:{"name.additional":"name.last"}}, false, true);
또는 속성이 포함 된 문서를 업데이트하려면 다음을 수행하십시오.
db.foo.update({"name.additional": {$exists: true}}, {$rename:{"name.additional":"name.last"}}, false, true);
false, true
상기 방법은 : { upsert:false, multi:true }
. 모두multi: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/
upsert:true
필드 이름이 존재하지 않는 경우에, 기본값을 필드 이름을 생성합니다 false
.
"table.field" : "table.field"
구문을 사용할 때 이것이 작동하지 않았습니다 . "field" : "field"
구문을 사용했을 때 작동했습니다 .
name.last
는 아닙니다 table.field
. 질문을 읽으면 name
필드에 객체가있는 것을 볼 수 있습니다 .
db.foo.update({}, {$rename:{"name.0.additional":"name.0.last"}}, false, true)
?
시도하십시오
db.collectionName.update({}, { $rename : { 'name.additional' : 'name.last' } }, { multi: true } )
이것을 읽으십시오 :) http://docs.mongodb.org/manual/reference/operator/rename/#_S_rename
upsert
및 multi
옵션 에 대해 아무 말도하지 않는 것 같습니다 .
몽고 이드로 똑같은 일을해야한다면 :
Model.all.rename(:old_field, :new_field)
최신 정보
구문이 다음과 같이 변경되었습니다 monogoid 4.0.0
.
Model.all.rename(old_field: :new_field)
Model.all.rename(old_field: :new_field)
@Felix Yan이 이전 방식이 잘 작동하는 것처럼 언급 한 것처럼이 nodejs 코드는 그렇게합니다. 다른 코드 조각에 문제가있어 도움이되기를 바랍니다.
"oldColumnName"열의 이름을 "documents"테이블의 "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!");
}
Mongo 3.4.0을 사용하고 있습니다.
$ rename 연산자는 필드 이름을 업데이트하며 다음 형식을 갖습니다.
{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }
예를 들어
db.getCollection('user').update( { _id: 1 }, { $rename: { 'fname': 'FirstName', 'lname': 'LastName' } } )
새 필드 이름은 기존 필드 이름과 달라야합니다. 포함 된 문서에서를 지정하려면 점 표기법을 사용하십시오.
이 조작은 콜렉션의 모든 문서 이름을 nmae 필드로 변경합니다.
db.getCollection('user').updateMany( {}, { $rename: { "add": "Address" } } )
db.getCollection('user').update({}, {$rename:{"name.first":"name.FirstName"}}, false, true);
위의 방법에서 true는 다음과 같습니다. {upsert : false, multi : true}. 모든 레코드를 업데이트하려면 multi : true가 필요합니다.
포함 된 문서에서 필드 이름 바꾸기
db.getCollection('user').update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )
링크 사용 : https://docs.mongodb.com/manual/reference/operator/update/rename/
false, true
의update
방법은 다음$rename
과 같습니다{ upsert:false, multi:true }
.multi:true
모든 기록을 업데이트 하려면가 필요합니다 .