저는 MongoDB를 백 엔드로 사용하고 MongoMapper를 ORM 도구로 사용하여 레일즈 애플리케이션을 구축하고 있습니다. 버전 1에서 다음 모델을 정의한다고 가정 해 보겠습니다.몽고 맵퍼 및 마이 그 레이션
class SomeModel
include MongoMapper::Document
key :some_key, String
end
나중에 버전 2에서 필요한 새 키가 필요합니다. 그래서, 버전 2에서, SomeModel는 이제 다음과 같습니다
class SomeModel
include MongoMapper::Document
key :some_key, String
key :some_new_key, String, :required => true
end
가 어떻게 some_new_key을 포함하는 모든 기존 데이터를 마이그레이션합니까? 모든 기존 문서에 대해 적절한 기본값을 설정하는 방법을 알고 있다고 가정합니다. 이 단계를 더 진행하면서 버전 3에서 some_key가 전혀 필요 없다는 것을 알았습니다. 그래서, 지금이 모델은 내 데이터베이스에있는 모든 기존 레코드가 some_key 설정 값이이
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
그러나처럼 보이는, 그것은 바로이 시점에서 공간을 낭비입니다. 그 공간을 어떻게 회수합니까?
ActiveRecord를 사용하면 some_new_key (version1 -> version2 이전)의 초기 값을 추가하고 some_key (version2 -> version3 이전)의 값을 삭제하는 마이그레이션을 만들었을 것입니다.
MongoDB/MongoMapper에서이 작업을 수행하는 적절한 방법은 무엇입니까? 어느 마이그레이션을 실행했는지 추적하는 몇 가지 방법이 여전히 필요하다고 생각됩니다. 그런 것이 있습니까?
EDITED : 사람들이 내 질문의 요점을 놓치고 있다고 생각합니다. 데이터를 변경 또는 재구성하기 위해 데이터베이스에서 스크립트를 실행할 수 있기를 원하는 경우가 있습니다. 위의 두 가지 예를 들었는데 하나는 새로운 필수 키가 추가 된 키이고 하나는 키를 제거하고 공간을 다시 확보 할 수있는 키입니다. 이 스크립트의 실행을 어떻게 관리합니까? ActiveRecord 마이그레이션을 사용하면 이러한 스크립트를 쉽게 실행할 수 있고 이미 실행 된 스크립트와 실행되지 않은 스크립트를 쉽게 확인할 수 있습니다. 분명히 데이터베이스에 대한 업데이트를 수행하는 Mongo 스크립트를 작성할 수는 있지만, 이미 찾고있는 업그레이드 스크립트를 추적 할 수있는 마이그레이션과 같은 프레임 워크가 필요합니다.
나는 Mongo (/ Mapper)가 그런 종류의 일에 너무 어리다고 생각한다. :/ – Konklone
Mongo DB에는 실제로 스키마가 없으므로 스키마 측면에서의 마이그레이션은 실제로 Mongo DB에서 적절한 개념이 아닙니다. 직접 데이터 이전 스크립트를 작성해야합니다. – zsong