2012-07-16 2 views
1

CouchDB에 저장하려는 그룹 및 사용자 문서가 있으며 사용자가 여러 그룹에 참여할 수 있습니다. 한 그룹에는 수천 명의 사용자가있을 수 있습니다. 여기에 나온 문서가 있습니다.모델 사용자 - CouchDB의 그룹 관계

Group: { "_id":"group1", "name":"abc", "type":"group" } 
Group: { "_id":"group2", "name":"abc", "type":"group" } 
User: { "_id":"user1", "login":"whatever", "groupIds": ["group1" , "group2"], "type":"user" } 
User: { "_id":"user2", "login":"whatever", "groupIds": ["group2"], "type":"user" } 

사용자 ID별로 그룹을 가져오고 싶습니다. 내가 할 수있는 최선이보기를 정의처럼 보인다

function(doc) { 
    if (doc.type == "user") 
    { 
    emit(doc._id, doc.groupIds); 
    } 
} 

하지만 별도의 요청에 각 그룹을 하나 개의 요청에 그룹 ID를 얻을 필요가이 경우

. groups by user id보기를 작성하여 모든 그룹이 하나의 요청으로 CouchDB에 반환되도록 할 수 있습니까?

답변

2

링크 된 문서 구문을 사용하여 주어진 사용자에 대한 그룹 문서 목록을 가져올 수 있습니다.

function(doc) { 
    if(doc.type === 'user') { 
    var gids = doc.groupIds; 
    for(var i=0, l=gids.length; i<l; i++) { 
     emit(doc._id, { '_id': gids[i] }); 
    } 
    } 
} 

을 그리고 당신은 include_docs=true 매개 변수를 사용하여이 쿼리 것이며, 소파 { "_id": "group1" }의 특별한 가치를보고 당신을 위해 문서를 연결하는 것이 검색 :이보기를 만듭니다. 반환 된 해시 행의 doc 요소에있는 모든 그룹 문서가 종료됩니다.