2011-08-19 5 views
2

mongodb에서 my dict 키의 이름을 바꾸려면 이름을 변경하고 싶습니다.mongodb에서 중첩 된 키의 이름을 변경하는 방법

은 일반적으로 내가 필드 1에서 에게 새로운 필드를 설정하려는 경우 내 문서 구조가

{ 
    'data':'.....', 
    'field':{'1':{'data':....},'2':{'data'...}}, 
    'more_data':'....', 
} 

처럼 보이는 db.update({'_id':id},{$rename:{'oldfieldname':newfieldname}})

처럼 작동 내가 할 필드 두를위한 db.update({'_id':id},{$set:{'field.0.1.name':'peter'}})

'필드'입니다 .1.2.name '

이름이 비슷해야한다고 생각하지만 그렇습니다. 아니 ... ($rename:{'field'.0.1': 2}

+0

나는 당신이하려는 것을 잘 따르지 않습니다. 전후 상태의 예를 보여줄 수 있습니까? – dcrosta

답변

1

귀하의 질문에 대한 명확하지 않지만 당신이 배열 내의 필드 이름을 바꾸려면 것 같습니다.

짧은 대답은 할 수 없습니다. docs에 명시된 바와 같이 $ rename은 배열을 확장하여 일치하는 이름을 찾습니다. 최상위 필드에서만 작동합니다.

이름 바꾸기를 시뮬레이트하기 위해 수행 할 수있는 작업은 필드와 해당 데이터를 새 이름으로 복사 한 다음 원래 필드를 삭제하는 것입니다. 또한 해당 객체/필드에 많은 양의 쓰기 작업이있을 경우 잠재적으로 동시 쓰기 작업을 처리하는 방법이 필요합니다.

5

여기

{ 
    "_id": ObjectId("4ee5e9079b14f74ef14ddd2f"), 
    "code": "130.4", 
    "description": "4'' Socket Plug", 
    "technicalData": { 
     "Drawing No": "50", 
     "length": "200mm", 
     "diameter: "20mm" 
    }, 
} 

내가 모든 문서를 통해 루프를 원하는 technicalData [ "아니오 그리기를"] 이름 바꾸기 ... 데이터베이스 같은 문서 구조를 감안할 때

에 키 이름을 바꾸기위한 유연한 방법입니다 technicalData [ "도면 번호"]

실행에서 실행 패널에 다음 스크립트 (우수) RockMongo

,286 행

코드도 몽고 쉘에서 실행됩니다.

+0

안녕 Chim, 나는 당신의 제안을 좋아하고 몽고 껍질에서 코드를 시도했지만 '문자열 필드 이름 [Drawing Number]를 사용하여 배열에 추가 할 수 없다'라는 말을 계속한다. $ set : "technicalData. $. Drawing Number": dNo}하지만 해당 위치에서 사용할 경우 위치 연산자를 이해하지 못하는 것 같습니다. mongo 쉘에서 문자열 필드 이름 [Drawing Number]를 사용하여 배열에 추가 할 수 없다는 메시지를 보냅니 까? – emilebaizel

+0

여기 내 이전 설명의 정리 된 버전입니다. 안녕하세요, 당신의 제안을 좋아하고 몽고 껍질에서 코드를 시도했지만 계속 '문자열 필드 이름 [profileId]'를 사용하여 배열에 추가 할 수 없습니다. 아래 코드를보고 올바른지 확인해 주시겠습니까? 감사. 함수 remap (x) { pid = x.readingDataSummaries [ "profileId_"]; db.profile.update ({ "_ id": x._id}, { $ 집합 : { "readingDataSummaries.profileId": pid} }); } db.profile.find ({ "_ id": "1b8bfde2-bb6c-4444-b570-9c12f9002c4f"}). forEach (매핑); – emilebaizel

+0

나는 지금 당장 다시 테스트를했는데 위 코드가 저에게 효과적입니다. mongo v2.02, v1.8에서 테스트 한 것 같습니다.? 이전에 – chim

관련 문제