3.2의 MongoDB 덤프, 3.4로 복원, 오류 인덱스 safe = null
다음 오류가 발생합니다(dump MongoDB 3.2)(MongoDB 3.4 복원).
Failed: ngivr-dev.ledgerhelpers: error creating indexes for ngivr-dev.ledgerhelpers: **createIndex error:** **The field 'safe' is not valid for an index specification.** Specification: **{ unique: true, name: "ledgerId_1", safe: null, ns: "ngivr-dev.ledgerhelpers", background: true, key: { ledgerId: 1 } }**
안전 지수가 null인 것 같습니다.하지만 MongoDB 3.4와 함께 사용하려면 어떻게 해야 합니까? 3.2는 괜찮습니다.
safe=true
인덱스 사양이 아닙니다.
3.4 이전 버전의 MongoDB에서는 인덱스 규격을 추가할 수 있습니다.특정 드라이버에 의해 사용되었습니다.
3.4에서 mongodb는 인덱스 사양에 대한 검증을 추가했습니다.
그래서 이 오류가 발생한 것입니다.유감스럽게도 3.2 버전의 인덱스에 유효하지 않은 인덱스 사양이 있는지 확인하고 그 후에 mongodump를 수행해야 합니다.
kz_sergey가 그의 대답에서 말했듯이, 당신은 할 수 있습니다.mongorestore
를 사용하면 잘 작동할 것입니다.
인덱스를 복원하는 이유는 무엇입니까? --noIndexRestore를 선택한 후 다시 만듭니다.
Aymeric의 의견에 따라 이 어색한 원라이너를 사용하여 .metadata.json 파일의 "safe" 속성을 바꿀 수 있습니다.
awk -i inplace '{gsub(",\"safe\":null", ""); print}' *.metadata.json
MongoDB 내보내기 디렉터리에서 실행합니다.이 방법을 사용하면 인덱스를 유지할 수 있지만 "안전" 옵션은 삭제할 수 있습니다.
find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \;
이렇게 하면 인덱스를 유지할 수 있습니다!현재 위치(.)에 있는 모든 파일을 찾은 다음 기본적으로 "safe":null의 모든 발생을 아무것도 없는 상태로 말하는 다음 정규식에 따라 동일한 프로세스(exec)를 사용하여 파일(sed-i)에서 대체합니다.
"." 인수를 mongodb 내보내기가 저장된 디렉토리의 경로로 대체합니다.
모든 인덱스를 유지하고 싶었기 때문에 위의 방법 중 하나도 제 경우에는 작동하지 않았습니다.*.metadata.json
파일 및 수동으로 모든 항목 제거"safe":true
.
컨텍스트:4.x 이상으로 업그레이드할 수 없는 이전 데이터베이스를 사용하고 있습니다. 원래 3.2에서 실행되었지만 Apple Silicon이 설치된 새 Mac에서 실행되는 mongo 버전이 없기 때문에 3.4(최초 버전 사용 가능)를 사용하여 이전 Mac에서 덤프하고 새 Mac에서 복원해야 했습니다.
언급URL : https://stackoverflow.com/questions/41036442/mongodb-dump-from-3-2-restore-with-3-4-error-index-safe-null
'it-source' 카테고리의 다른 글
내장된 Tomcat 서버에 context.xml 파일을 추가하는 방법 (0) | 2023.07.10 |
---|---|
합이 상수 K - Excel인 N개의 난수 생성 (0) | 2023.07.10 |
Spring Boot to Spring Retry 주석에서 구성 속성을 주입하는 방법은 무엇입니까? (0) | 2023.07.05 |
Android에서 텍스트 편집 보기에서 다중 행을 허용하시겠습니까? (0) | 2023.07.05 |
NodeJS Types 스크립트에서 @types 버전을 관련 패키지 버전과 연결하는 방법은 무엇입니까? (0) | 2023.07.05 |