2012-01-11 2 views
2

특정 필드가 포함 된 내 CouchDB 데이터베이스 중 하나에서 기존 문서의 구조를 변경해야합니다. 는 지금, 필드, 예를 들어 단순한 문자열입니다 :CouchDB 데이터베이스의 모든 문서 구조를 변경하려면 어떻게해야합니까?

{ 
    // some other fields 
    "parameters": { 
    "typeId": "something", 
    "otherField": "dont_care" 
    } 
} 

이 예에서, 내가 관심 분야는 "유형 ID"입니다. 나는 이것에 대한 요구 사항이 수정 되었기 때문에 String 배열로 만들고 싶다 : ( 그러나 분명히 모든 문서에서 필드의 현재 값을 유지해야한다! 위의 예제에서 결과는 다음과 같다.

{ 
    // some other fields 
    "parameters": { 
    "typeId": [ "something" ] // now we can have more items here 
    "otherField": "dont_care" 
    } 
} 

그냥 경우에이 도움이 ?? 달성 할 수있는 방법 어떤 아이디어 :. 내 자바 웹 응용 프로그램이 Ektorp 라이브러리를 통해 CouchDB를와 통신

답변

2

내가 함수를 작성 먼저 말할 것를 (또는 메서드 또는 클래스)를 사용하여 구식 문서를 새로운 스타일 문서로 변환하거나 필요한 경우 관련없는 문서 (예 : 설계 문서)를 올바르게 처리합니다. 이 코드에 대한 확신이 생길 때까지 일부 단위 테스트를 작성하십시오.

다음 단계는 기본적으로 구식 문서를 찾고 수정 루틴을 사용하여 새로운 스타일 문서가되도록 업데이트하는 것입니다.

작은 데이터 세트가있는 경우 /_all_docs?include_docs=true을 쿼리하고 전체 데이터 세트를 한 번에 처리하면됩니다. 더 큰 데이터 세트가있는 경우, 아마도이보기을 수행 할 모든 이전 스타일의 문서 표시됩니다

function(doc) { 
    // map function for "to_do" view 
    if(doc.parameters && typeof doc.parameters == "string") 
    emit(doc._id, doc) 
} 

이전 스타일의 문서를 식별 할 뷰를 작성합니다. 변환 할 문서를 50 개 더 확보하려면 GET /my_db/_design/converter/_view/to_do?limit=50을 입력하십시오. 각 행의 "value" 필드는 문서의 전체 복사본이되므로 변환기 기능을 통해 즉시 실행할 수 있습니다.

문서를 변환하고 나면 다시 데이터베이스에 게시하거나 배치를 작성한 다음 _bulk_docs을 사용하여 동일한 작업을 수행 할 수 있습니다. 각 문서가 저장되면 to_do보기에서 사라집니다. (벌크 문서는 똑같은데 조금 더 빠릅니다.) (409 Conflict 오류가 발생하면 무시하십시오.) to_do에 0 행이 생기고 완료 될 때까지이 절차를 다시 실행하십시오!

상황에 따라 신중하게 판단해야합니다. 이것이 프로덕션 데이터라면 좋은 단위 테스트를 작성하는 것이 좋습니다. 개발 환경이라면 그냥 가십시오!

마지막 비결은 비어있는 새 데이터베이스를 만들고 기본 데이터베이스를 복제하는 것입니다. 이제 아이디어를 시험해보기 위해 중복 된 샌드 박스가 생겼습니다. 결과에 만족할 때까지 샌드 박스를 삭제하고 다시 복제 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 변환기 기능을 작성하는 가장 쉬운 방법은 무엇입니까? CouchDB HTTP API 만 사용하여이를 수행하고 JavaScript 함수를 변환기 함수로 실행하려고 생각했습니다. 그것이 이미 익숙한 Ektorp 라이브러리를 사용하여 가능하다고 생각하거나 Java로 작성하는 것이 더 좋을까요? – Renato

+2

당신은이 couchapp를 사용할 수 있습니다 : http://harthur.github.com/costco/ 꽤 편리합니다. –

+0

라이언 덕분에,이 작은 couchapp은 내가 필요로하는 것에 아주 좋습니다 !!! – Renato

관련 문제