programing

mongore restore 명령으로 기존 레코드를 바꾸시겠습니까?

golfzon 2023. 4. 29. 10:08
반응형

mongore restore 명령으로 기존 레코드를 바꾸시겠습니까?

mongore restore가 데이터베이스에 존재하는 레코드를 건너뛰는 대신 대체할 수 있는 방법이 있습니까? 기본 동작입니다.

저는 현재 mongodb의 최신 2.4.x 버전을 사용하고 있습니다.

다음 매개 변수를 사용할 수 있습니다.mongorestore:

덤프된 백업에서 컬렉션을 복원하기 전에 대상 데이터베이스에서 컬렉션을 삭제합니다. --drop은 백업에 없는 컬렉션을 삭제하지 않습니다.

아니요. mongore 스토어에서:

기존 데이터베이스로 복원하는 경우 mongore restore는 기존 데이터베이스에만 삽입되고 어떤 종류의 업데이트도 수행하지 않습니다.기존 문서의 대상 데이터베이스 및 컬렉션에 동일한 값 _id 필드가 있는 경우 mongorestore는 해당 문서를 덮어쓰지 않습니다.

데이터베이스 또는 데이터베이스 내의 컬렉션을 몽고레스토어로 완전히 덮어쓰려면 데이터베이스 또는 컬렉션을 삭제합니다(vikas의 답변에 따라 --drop 매개변수 선택).특정 문서를 바꾸거나 중복된 문서를 병합하려면 사용자가 직접 스크립트를 작성하여 복원하고 보다 복잡한 논리를 구현해야 합니다.

컬렉션이 적은 경우 항상 다음을 수행할 수 있습니다.

  1. mongo는 당신의 목표 컬렉션을 다른 곳에 버립니다.
  2. 대상 컬렉션 삭제
  3. mongore 원래 덤프 파일 복원
  4. mongor는 1단계에서 만든 덤프 파일을 복원합니다.

그러면 우선 순위가 DB의 _ids가 아닌 덤프 파일로 전환됩니다.

사용하여 이 문제를 해결했습니다.

  1. 컬렉션을 복원하고 출력을 파일에 기록합니다(아래 참조).
mongorestore --db database -c collection ~/path_to_bson > output.txt 2>&1
  1. 포함된 행을 필터링합니다.- E11000 duplicate key error collection ...ObjectId(...)
  2. 그런 다음 다중 편집 도구(내 경우 숭고함)를 사용하여 해당 행을 변환합니다.db.collection.remove({_id: ObjectId(...)})
  3. 데이터베이스를 다시 복원합니다.

언급URL : https://stackoverflow.com/questions/27666908/mongorestore-command-replace-existing-records

반응형