2014-09-18 4 views
1

키워드 목록으로 검색 할 수있는 문서와보기가 있습니다._id별로 문서를 그룹화하지만 다른 값으로 검색 할 수 있습니다.

map: function (doc) { 
    doc.keywords.forEach(function(word) {         
    emit(word, doc);            
    }); 
} 

이 내가 다시 foo 문서를 얻을,하지만 난을 제공하지 않는 경우에 문제가 있다는 점에서 잘 작동 : 다음

{ 
    _id: "foo", 
    keywords: ["bar", "baz"], 
} 

, 내가보기를 가지고 : 문서처럼 보일 수 있습니다 key이 문서를 두 번 얻습니다. 두 개의 키워드가 있기 때문에 의미가 있습니다. 그러나 나는 한 번만 문서를 원한다.

는 또한

reduce: function (key, value, rereduce) {        
    return value;             
} 

을 추가했지만이 나에게 reduce_overflow_error을 제공합니다. return null을 사용하면 문서에 대한 값은 null입니다.

나는 이것에 대한 목록 기능을 사용하는 방법에 대해서도 읽었지만 목록 기능이 couchapp에 있어야한다고 생각하지 않습니다. 이것은 또한 상당히 단순해야한다고 생각되는 것에 대해 꽤 복잡해 보입니다.

보기를 쿼리 할 때 복제본이 멈추게하려면 어떻게해야합니까?

답변

0

귀하의 질의가 혼동 스럽지만 오류로 귀하를 도와 드리겠습니다.

축소 기능에는 여러 값 (즉, 동일한 키가있는 문서 배열)이 있습니다. 따라서 아래에서와 같이 reduce 함수를 다시 작성하면 키워드 당 정확히 하나의 문서 만있는 키워드 색인을 얻을 수 있지만 축소 된 문서는 원본 문서에 더 이상 연결하지 않습니다.

function (key, values, rereduce){ 
    return values[0]; 
} 

사용 사례가 키워드 당 문서의 수를 얻을 수 있었다면 당신은 그것을 작성합니다 것을 포함 인덱스 항목은 문서를 참조하려는 경우

function (key, values, rereduce){ 
    if (rereduce){ 
     var sum = 0; 
     for (i=0; i< values.length(); i++){ 
      sum = sum + values[i]; 
     } 
     return sum; 
    } 
    return values.length(); 
} 

열쇠, 당신은 감소 기능을 사용할 수 없습니다.