2012-07-17 2 views
1

글쎄, 나는 1000000 레코드가 MongoDB 컬렉션을 수정입니다. 이전 개발자는 기본 _id를 정말 잘못된 것으로 덮어 씁니다. 이제 고칠 때 _id 인덱스를 다시 생성 할 수 있습니까? mongoRestore 외에도 더 빠른 방법이 있습니까? 꽃밥 DB에 원래의 DB에서기본 Mongo 색인의 색인을 다시 생성하는 방법은 무엇입니까?

1) 데이터베이스 복사 :


여기 내 업데이트 절차입니다.

2) 모든 레코드에 대해 _id를 제거하십시오.

3) 그건 내가

4) 새로운 _id로 원점 DB로 다시 컬렉션을 복사) 할 방법을 잘 모르겠어요 무엇 (또는 다른 방법은에서 mongoDump을 is (모든 레코드에 대한 _ID를 다시 생성 새/임시 DB를 누른 다음 파일을 원본 DB 인 MongoRestore ie에 보냅니다. 그러면 각 레코드에 새로운 _id가 생깁니다. 그런 식으로 작동하지만 느리게 보입니다.)

+0

왜 재생성해야한다고 생각하십니까? –

+0

글쎄, _id가 콜리 전을 유발하는 해시 값으로 덮어 쓰기 때문입니다. 그래서, 나는 오래된 것을 제거해야합니다. Mongo의 기본 방식으로 복원하십시오. – murvinlai

+0

_id 값을 어떻게 복원하고 있습니까? 각. 서를 읽고 _id를 갱신 할 경우 색인을 다시 작성할 필요가 없습니다. 백업의 값으로 복원하려면 백업 수행 방법에 따라 다릅니다. –

답변

1

기본값 인 MongoDB '_id'값은 문서가 처음 삽입 될 때 클라이언트 측의 MongoDB 드라이버. 현재 시간, 클라이언트가 실행중인 시스템의 호스트 이름, 클라이언트의 프로세스 ID 및 다중 o를 구별하는 데 사용되는 증가 값을 사용하여 생성됩니다 같은 과정으로

자세한 내용은

, 그 결과 http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification

를 참조하십시오, 당신은 내가 문서의 항목으로 위에서 언급 한 모든 정보를 저장 한 일이하지 않는 한 MongoDB를 '_id'값을 원래의 기본을 재구성 할 방법이 없습니다 .

또한 '_id'필드는 변경할 수 없으며 변경할 수 없습니다. 이전 개발자가 _id 필드를 처음 겹쳐 쓰는 방법을 잘 모르겠습니다. 가장 좋은 추측은 문서를 가져 와서 _id 필드의 값을 변경하고 이전 필드를 삭제 한 다음 새 필드를 삽입 한 것입니다.

"mongodump"를 수행 한 후 '_id'필드 이외의 문서 내용이 변경되지 않은 경우 데이터를 다시 가져 오는 가장 빠른 방법은 해당 덤프 파일을 복원하는 것입니다.

문서 내용이 변경된 경우 변경 사항을 유지하려면 이전 개발자가 역순으로 수행 한 것과 동일한 작업을 수행해야합니다. 컬렉션의 모든 문서를 가져 와서 기본 드라이버 기능을 사용하십시오 새 ObjectID를 만들려면 이전 문서를 삭제하고 데이터를 새 _id로 새 문서로 저장합니다.