[MONGODB] 배열 내에서 MongoDB를 이름 바꾸기 데이터베이스 필드
MONGODB배열 내에서 MongoDB를 이름 바꾸기 데이터베이스 필드
나는이에 식별자의 이름을 변경해야합니다
{ "general" :
{ "files" :
{ "file" :
[
{ "version" :
{ "software_program" : "MonkeyPlus",
"indentifier" : "6.0.0"
}
}
]
}
}
}
난 노력 했어
db.nrel.component.update(
{},
{ $rename: {
"general.files.file.$.version.indentifier" : "general.files.file.$.version.identifier"
} },
false, true
)
그러나 그것은 반환 : $ 이름 바꾸기 소스가 동적 배열되지 않을 수 있습니다.
해결법
-
==============================
1.문서에서 언급 한 바와 같이 직접 하나의 명령으로 배열 내의 필드의 이름을 바꿀 수있는 방법이 없습니다. 귀하의 유일한 옵션은, 컬렉션의 문서를 반복을 읽고 $ 해제 된 / $ 설정 새로운 작업과 각을 업데이트하는 것입니다.
문서에서 언급 한 바와 같이 직접 하나의 명령으로 배열 내의 필드의 이름을 바꿀 수있는 방법이 없습니다. 귀하의 유일한 옵션은, 컬렉션의 문서를 반복을 읽고 $ 해제 된 / $ 설정 새로운 작업과 각을 업데이트하는 것입니다.
-
==============================
2.무엇의 가치가해야 할 끔찍한 소리가 잠시 동안, 해결책은 아주 쉽게 사실이다. 물론 이것은 당신이 얼마나 많은 기록에 따라 달라집니다. 그러나 여기 내 예입니다 :
무엇의 가치가해야 할 끔찍한 소리가 잠시 동안, 해결책은 아주 쉽게 사실이다. 물론 이것은 당신이 얼마나 많은 기록에 따라 달라집니다. 그러나 여기 내 예입니다 :
db.Setting.find({ 'Value.Tiers.0.AssetsUnderManagement': { $exists: 1 } }).snapshot().forEach(function(item) { for(i = 0; i != item.Value.Tiers.length; ++i) { item.Value.Tiers[i].Aum = item.Value.Tiers[i].AssetsUnderManagement; delete item.Value.Tiers[i].AssetsUnderManagement; } db.Setting.update({_id: item._id}, item); });
I 배열이 발견 내 컬렉션에 걸쳐 반복 처리하고 "잘못된"이름을 찾을 수있다. 나는 다음으로 반복 하위 콜렉션, 새로운 값을 설정 이전을 삭제하고 전체 문서를 업데이트합니다. 그것은 상대적으로 고통이었다. 난 단지를 통해 검색 할 수 수십 행의 수천을 부여하는 몇 다스 충족 기준을의.
그럼에도 불구하고,이 대답은 사람을 도움이되기를 바랍니다!
편집 : 쿼리에 추가 된 스냅 샷 (). 왜 주석을 참조하십시오.
MongoDB를 3.4에서 스냅 () 함수를 제거 하였다. 그래서 3.4 이상 몽고를 사용하는 경우, 위의 예는 스냅 샷 () 함수를 제거해야합니다.
-
==============================
3.나는 비슷한 문제가 있었다. 내 상황에서 나는 다음과 같은 훨씬 쉽게 알게되었다 :
나는 비슷한 문제가 있었다. 내 상황에서 나는 다음과 같은 훨씬 쉽게 알게되었다 :
mongoexport --db mydb --collection modules --out modules.json
mongoimport --db mydb --collection modules --drop --file modules.json
-
==============================
4.몽고 4.2 시작, db.collection.update ()는 마지막으로 자신의 값에 따라 필드의 업데이트를 허용 집계 파이프 라인을 받아 들일 수 있습니다 :
몽고 4.2 시작, db.collection.update ()는 마지막으로 자신의 값에 따라 필드의 업데이트를 허용 집계 파이프 라인을 받아 들일 수 있습니다 :
// { general: { files: { file: [ // { version: { software_program: "MonkeyPlus", indentifier: "6.0.0" } } // ] } } } db.collection.updateMany( {}, [{ $set: { "general.files.file": { $map: { input: "$general.files.file", as: "file", in: { version: { software_program: "$$file.version.software_program", identifier: "$$file.version.indentifier" // fixing the typo here } } } }}}] ) // { general: { files: { file: [ // { version: { software_program: "MonkeyPlus", identifier: "6.0.0" } } // ] } } }
문자 적으로이 업데이트 문서 (재) 같은 "software_program"필드가 포함 된 이름이 "식별자"필드를 포함하는 "버전"개체의 "파일"요소 매핑 $ 의한 "general.files.file"설정의 배열을 $ 무슨 일이 "indentifier"의 값으로 사용된다.
몇 가지 추가 정보 :
-
==============================
5.또한 배열에 속성 이름을 변경하고 싶습니다 : 나는 것을 사용
또한 배열에 속성 이름을 변경하고 싶습니다 : 나는 것을 사용
db.getCollection('YourCollectionName').find({}).snapshot().forEach(function(a){ a.Array1.forEach(function(b){ b.Array2.forEach(function(c){ c.NewPropertyName = c.OldPropertyName; delete c["OldPropertyName"]; }); }); db.getCollection('YourCollectionName').save(a) });
from https://stackoverflow.com/questions/9122966/mongodb-rename-database-field-within-array by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 일치는 기본이되는 문자와 같은 문자를 악센트 (0) | 2019.12.09 |
---|---|
[MONGODB] MongoDB를 별개의 기록을 얻을 (0) | 2019.12.09 |
[MONGODB] MongoDB의 배열에서 특정 요소를 받기 [중복] (0) | 2019.12.09 |
[MONGODB] (MongoDB의 자바) 배열에 $ 추진 (0) | 2019.12.09 |
[MONGODB] MongoDB를 가진 배열에서 특정 항목을 삭제 (0) | 2019.12.09 |