2012-01-27 5 views
5

저는 일반적으로 CouchDB 및 문서 지향 데이터베이스를 처음 사용합니다.CouchDB에서 중복 식별하기

나는 CouchDB를 가지고 놀고 있었고 (펄을 사용하여) 문서를 만드는 방법과 Futon의 Map/Reduce 기능을 사용하여 데이터를 쿼리하고보기를 만드는 것에 익숙해졌습니다.

내가 아직도 알아 내려고하는 것 중 하나는 Futon 's Map/Reduce를 사용하여 문서간에 중복 값을 식별하는 방법입니다. 나는 다음과 같은 서류가있는 경우 예를 들어

는 :

{ 
    "_id": "123", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:06:03Z" 
} 

{ 
    "_id": "124", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:07:03Z" 
} 

을 내가 "이름"값을 복제 한 문서 아이디의 목록을 얻고 싶었다,/I는 이불지도와 함께 할 수있는이 뭔가 줄이다? 다음과 같은 결과를 달성하기 바라고

이다 :

{ 
    "name": "carl", 
    "dupes": [ "123", "124" ] 
} 

.. 또는를 ..

그 중복 된 값을 포함하는 값, 및 관련된 문서 ID를 것
{ 
    "carl": [ "123", "124" ] 
} 

.. .

Map/Reduce를 사용하여 몇 가지 다른 작업을 시도했지만 필자가 이해하는 한지도 기능은 문서 단위로 데이터와 함께 작동하며 줄이기 기능은 키/주어진 문서의 값.

필자는 펄 필요가있는 데이터를 가져 와서 거기에서 마술을하고 원하는 결과를 얻을 수 있다는 것을 알았지 만, 장점/제한 사항을 더 잘 이해하기 위해 지금은 CouchDB에서만 작동하려고합니다.

나는 이것이 RDBMS 테이블처럼 하나의 문서를 사용하는 것에 대해 생각하고 또 다른 방법 :

날 /지도를 사용하여 내가 원래 생각했던 방법으로 기능을 줄 수 있도록해야
{ 
    "_id": "names", 
    "rec1": { 
    "_id": "123", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:06:03Z" 
    }, 
    "rec2": { 
    "_id": "124", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:07:03Z" 
    } 
} 

.. . 그러나 이것이 이상적인지 확실하지 않습니다.

나는 내 마음이 RDBMS 토지에 아직도 갇혀 있다는 것을 이해한다. 그래서 나는 위에서 뭘하려고 노력했는지는 불필요 할 수도있다. 이것에 대한 어떤 통찰력이라도 대단히 감사 할 것입니다.

감사합니다.

편집 : 몇 가지 예에서 JSON 구문이 수정되었습니다.

답변

7

고유 한 값 목록 만 원한다면 매우 간단합니다. 중복을 식별하려면 덜 쉽습니다. 두 경우 모두

,이 같은지도 기능은 충분합니다 :

function (doc) { 
    emit(doc.name); 
} 

당신의 감소 기능의 경우, 단지 _count를 입력합니다.

로보기 출력이 같이 보일 것이다 : (당신이 문서를 기반으로)

{ 
    "rows": [ 
     { "key": "carl", "value": 2 } 
    ] 
} 

여기에서, 당신은 이름의 목록뿐만 아니라 주파수를해야합니다.이 목록을 가져 와서 직접 필터링하거나 "all couch"경로를 사용하여 _list function을 사용하여 최종 필터링을 수행 할 수 있습니다.

function (head, req) { 
    var row, duplicates = []; 
    while (row = getRow()) { 
     if (row.value > 1) { 
      duplicates.push(row); 
     } 
    } 
    send(JSON.stringify(duplicates)); 
} 

_list 기능을 읽으십시오.이 기능은 매우 유용하고 다양합니다.

+0

... 및 중복 식별자 얻기 : ? skip = 1 & reduce = false & key = "car1" –

관련 문제