programing

Mongoose 스키마 변경 처리

muds 2023. 2. 25. 22:27
반응형

Mongoose 스키마 변경 처리

애플리케이션의 진화에 따라 Mongoose 스키마를 업데이트/이행하기 위한 베스트 프랙티스(또는 툴)는 무엇입니까?

재미있는 것은 MongoDB가 RDBMS의 스키마 문제에 대응하기 위해 태어났다는 것입니다.아무것도 이행할 필요가 없습니다.필드가 필요한 경우 스키마 정의에서 기본값을 설정하기만 하면 됩니다.

new Schema({
    name: { type: string }
})

대상:

new Schema({
    name: { type: string },
    birthplace: { type: string, required: true, default: 'neverborn' }
});

스키마 변경을 반영하기 위해 데이터베이스를 업데이트해야 하는 문제가 발생했습니다.몇 가지 조사 후 mongo 콘솔에서 update Many() 함수를 사용하여 업데이트를 수행하기로 결정했는데 꽤 잘 작동했다고 생각합니다.

이를 vimdude의 예에 적용하기 위해 코드는 다음과 같습니다.

try { 
    db.<collection>.updateMany( { birthplace: null }, { $set: 
              {"birthplace": "neverborn" } } ); 
} catch(e) { 
    print(e);
}

update Many() 함수는 필터를 기반으로 컬렉션의 모든 문서를 업데이트합니다.이 경우 필터는 '생일' 필드가 null인 모든 문서를 찾습니다.그런 다음 '생일'이라는 이름의 문서에 새 필드를 설정하고 해당 값을 'neverborn'으로 설정합니다.

코드를 실행한 후 사용자의 상황에 맞게 수정하여 다음 작업을 수행합니다.

db.<collection>.find().pretty()

변경되었는지 확인합니다."neverborn" 값을 가진 새 필드 "birthplace"가 컬렉션의 각 문서 끝에 표시됩니다.

도움이 됐으면 좋겠다.

업데이트: 테스트 완료.현재 형태로는 동작하지 않습니다.올바른 아이디어입니다.모듈 자체를 대폭 조정하여 동작시키기 위해 단일 이행이 필요하게 되었습니다.하지만 큰 변화나 다른 스키마들을 어떻게든 추적하지 않고서는 의도한 대로 작동하지 않을 것 같습니다.


mongoose 데이터 이행을 원하는 것 같습니다.

이는 문서를 사용할 때 이전 버전의 스키마를 마이그레이션하기 위한 것으로, mongodb에서 마이그레이션을 처리하는 가장 좋은 방법입니다.

문서 모음(일명 다른 테이블)에서 전체 데이터 집합 마이그레이션을 실행하는 것은 서버에 큰 부하가 걸리고 애플리케이션/서버 다운타임이 필요할 수 있으므로 실제로 실행하려는 것은 아닙니다.경우에 따라서는 새로운 스키마/변경사항 및 콜 저장을 적용하는 모든 문서를 단순히 캡처하는 스크립트를 작성해야 할 수도 있지만, 언제 어디서 작성해야 하는지 이해해야 합니다.예를 들어 이행 스크립트를 실행하기 위해 서버를 3시간 동안 정지하는 것보다 doc init에 이행 로직을 추가하는 것이 퍼포먼스에 더 큰 영향을 미칠 수 있습니다.

저는 링크도 꽤 도움이 된다는 것을 알았습니다.기본적으로 위의 내용을 더 자세히 반복하여 위의 노드 패키지의 개념을 php로 구현합니다.

N.B. 모듈은 5개월 된 0포크로 되어 있지만 주위를 둘러보고 있으며 압델세이드의 대응 스타일보다 더 나은/더 유용한 것을 찾을 수 없습니다.

언급URL : https://stackoverflow.com/questions/7617002/dealing-with-schema-changes-in-mongoose

반응형