2012-07-16 42 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元素中的所有組文檔結束。