복붙노트

[MONGODB] 몽구스의 스키마 변경 다루기

MONGODB

몽구스의 스키마 변경 다루기

응용 프로그램의 진화로 몽구스 스키마를 마이그레이션 / 업데이트에 대한 모범 사례 (또는 도구) 무엇입니까?

해결법

  1. ==============================

    1.업데이트 : 테스트,이 현재의 형태에서 작동하지 않습니다, 그가는 올바른 생각을 가지고, 나는 모듈 자체의 상당한 조정이 함께 작업에 하나의 마이그레이션을 얻었다. 그러나 나는 몇 가지 큰 변화없이 의도 한대로 작동하고 어떻게 든 다른 스키마를 추적 표시되지 않습니다.

    업데이트 : 테스트,이 현재의 형태에서 작동하지 않습니다, 그가는 올바른 생각을 가지고, 나는 모듈 자체의 상당한 조정이 함께 작업에 하나의 마이그레이션을 얻었다. 그러나 나는 몇 가지 큰 변화없이 의도 한대로 작동하고 어떻게 든 다른 스키마를 추적 표시되지 않습니다.

    당신이 원하는 것 같은데 몽구스 - 데이터 마이그레이션

    당신이 MongoDB의에서 마이그레이션을 처리하는 가장 좋은 방법이 될 것으로 보인다 이는 그들을 사용할 때 문서의 이전 스키마 버전을 마이그레이션하기위한 것입니다.

    당신은 정말 당신의 서버에 부하를두고 응용 프로그램 / 서버 다운 타임을 요구할 수로 (ALTER 테이블 ALA) 문서 컬렉션 전체 데이터 세트의 마이그레이션을 실행하지 않습니다. 때때로 당신은 단순히 모든 문서가 새 스키마 / 변경 및 저장 호출을 적용 잡고 스크립트를 작성해야 할 수도 있습니다,하지만 당신은 그렇게 언제 / 어디서 이해할 필요가있다. 예는 더 마이그레이션 스크립트를 실행하기 위해 3 시간 동안 서버를 복용보다 성능 저하의가 가치가 초기화 문서로 마이그레이션 로직을 추가 할 수 있습니다.

    나는 기본적으로 더 이상 상술 한나와 본질적으로 PHP는 위의 노드 패키지의 개념을 구현,뿐만 아니라이 링크를 꽤 도움이되었다고합니다.

    N.B. 이 모듈은 기존 5개월, 0 포크이지만, 주위를 찾고 및 응답의 abdelsaid의 스타일보다 / 더 도움이 아무것도 찾을 수 없습니다 ..

  2. ==============================

    2.그것은의 재미하지만은, MongoDB의는 RDBMS의 스키마 문제에 대응하기 위해 태어났다. 당신은 필드가 필요한 경우 당신이해야 할 모든 스키마 정의의 기본 값을 설정, 아무것도 마이그레이션 할 필요가 없습니다.

    그것은의 재미하지만은, MongoDB의는 RDBMS의 스키마 문제에 대응하기 위해 태어났다. 당신은 필드가 필요한 경우 당신이해야 할 모든 스키마 정의의 기본 값을 설정, 아무것도 마이그레이션 할 필요가 없습니다.

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

    에:

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

    3.난 그냥 내 스키마에 대한 변경 사항을 반영하기 위해 내 데이터베이스를 업데이트해야이 문제를 가지고 있었다. 몇 가지 조사 후 나는 업데이트를 확인하기 위해 몽고 콘솔의 updateMany () 함수를 사용하기로 결정하고 나는 그것이 꽤 잘했다 생각합니다.

    난 그냥 내 스키마에 대한 변경 사항을 반영하기 위해 내 데이터베이스를 업데이트해야이 문제를 가지고 있었다. 몇 가지 조사 후 나는 업데이트를 확인하기 위해 몽고 콘솔의 updateMany () 함수를 사용하기로 결정하고 나는 그것이 꽤 잘했다 생각합니다.

    vimdude의 예를 다음과 같이 보일 것 코드에이를 적용하려면 :

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

    updateMany () 함수는 필터에 기초 컬렉션에있는 모든 문서를 갱신한다. 이 경우 필터는 필드 '출생지가'null의 모든 문서를 찾고 있습니다. 그런 다음 '발상지'라는 이름의 해당 문서에 새 필드를 설정하고 'neverborn'에 그 값을 설정합니다.

    코드를 실행 한 후, 귀하의 상황을 실행할 반영하도록 수정 :

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

    변경 한되었는지 확인합니다. "neverborn"의 값을 가진 새로운 분야 "출생지"컬렉션의 각 문서의 끝 부분에 표시되어야합니다.

    희망이 도움이.

  4. from https://stackoverflow.com/questions/7617002/dealing-with-schema-changes-in-mongoose by cc-by-sa and MIT license