如果我理解正確,每個組都有一個用戶列表和一個項目列表。然後,對於每個組,可以發出針對每個(用戶,項目)的行一對:
emit(userId, { _id: itemId });
與key="userId"
查詢視圖,應該給正確的結果。
例如,如果一組文檔的結構如下:
{
"_id": "Group_gid1",
"userIds": ["User_uid1", ..., "User_uidN"],
"itemIds": ["Item_iid1", ..., "Item_iidM"]
}
你的地圖功能可以是這樣的(未測試!):
function (doc) {
var i, ii, userId, j, jj, itemId, ids = doc._id.split('_');
if (ids[0] === 'Group' && doc.userIds && doc.itemIds) {
for(i = 0, ii = doc.userIds.length, jj = doc.itemIds.length; i < ii; i += 1) {
userId = doc.userIds[i];
for(j = 0; j < jj; j += 1) {
itemId = doc.itemIds[j];
emit(userId, { _id: itemId });
}
}
}
}
如果用它查詢key="User_1"&include_docs=true
它應該返回_id=="User_1"
用戶組中的所有項目。
這要求模型在項目模型中有userid,不是嗎?我無法鏈接。 – Morten
不...我在答案中添加了示例代碼。希望它有助於使其更清楚。我已經將發射的值更改爲'{_id:itemId}',因此在查詢'include_docs = true'時,您可以獲取項目文檔(而不僅僅是id)。 –
是的,那會工作。查找中間實體並使用這兩種類型的列表工作... – Morten