MongoDB에 있는 모든 문서의 필드 이름을 변경하려면 어떻게 해야 합니까?
5000개의 레코드가 있는 MongoDB 컬렉션이 있다고 가정합니다.각 레코드에는 다음과 같은 것이 포함되어 있습니다.
{
"occupation":"Doctor",
"name": {
"first":"Jimmy",
"additional":"Smith"
}
모든 문서에서 필드의 이름을 "추가"에서 "마지막"으로 쉽게 바꿀 수 있는 방법이 있습니까?설명서에서 $rename 연산자를 봤는데 서브필드를 지정하는 방법을 잘 모르겠습니다.
다음을 사용할 수 있습니다.
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/
$rename 필드 업데이트 연산자를 사용할 수 있습니다.
db.collection.update(
{},
{ $rename: { 'name.additional': 'name.last' } },
{ multi: true }
)
만약 당신이 mongoid에 대해 같은 일을 해야 한다면:
Model.all.rename(:old_field, :new_field)
갱신하다
의 구문이 변경되었습니다.monogoid 4.0.0:
Model.all.rename(old_field: :new_field)
누구나 잠재적으로 이 명령을 사용하여 컬렉션에서 필드 이름을 변경할 수 있습니다(_id를 사용하지 않음).
dbName.collectionName.update({}, {$rename:{"oldFieldName":"newFieldName"}}, false, true);
참고:
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/ 링크를 사용합니다.
@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!");
}
MongoMapper를 사용하는 경우 다음과 같이 동작합니다.
Access.collection.update( {}, { '$rename' => { 'location' => 'location_info' } }, :multi => true )
언급URL : https://stackoverflow.com/questions/9254351/how-can-i-rename-a-field-for-all-documents-in-mongodb
'programing' 카테고리의 다른 글
| PHP를 사용하여 WordPress에서 페이지 제목 설정 (0) | 2023.03.16 |
|---|---|
| AngularJs ng트리거 onblur 변경 (0) | 2023.03.16 |
| ASP.NET MVC 파라미터로서 JSON 객체를 View에서 컨트롤러로 전달하는 방법 (0) | 2023.03.16 |
| Angular에서의 spec.js 파일 사용JS (0) | 2023.03.16 |
| 오류: 업데이트 실행 시 업데이트 작업 문서에 원자 연산자가 포함되어야 합니다.하나. (0) | 2023.03.16 |