2013-06-20 77 views
2

我用下面的映射函數來獲得從一組「鏈接」到用戶文檔:過濾CouchDB的鏈接文檔

function(doc) { 
    var i, id; 
    if(doc.type == 'group' && !doc.deletedAt) { 
    for (i = 0; i < doc.users.length; ++i) { 
     id = doc.users[i]; 
     emit(doc._id, {'_id': id}); 
    } 
    emit(doc._id, null); 
    } 
} 

A組的樣子:

{ 
    "_id": "3979684300c58a4c90c7c6e0d6033dce", 
    "_rev": "90-283daf6cb4edfd838a50121e3364f4cb", 
    "type": "group", 
    "name": "test", 
    "description": "test", 
    "users": [ 
     "544f4718732b51506d9de60a4e000505", 
     "63de6351a30879ee091b248c930a9254", 
     "5684612479ba328ba2575c60e800adee" 
    ], 
    ... other fields 
} 

用戶lookes像:

{ 
    "_id": "8f87c698f119044890c5e788cd0028c1", 
    "_rev": "5-441da938e50fb692da55d74231f614c2", 
    "empId": "", 
    "type": "user", 
    "disabled": false, 
    "username": "fred", 
    "firstName": "Fred", 
    "lastName": "Jones", 
    ...other fields 
} 

地圖功能的工作原理,但我需要過濾掉有一個「deletedAt」屬性設置用戶的文件。這可能在地圖功能?

回答

2

如果不更改文檔結構,則無法執行此操作。您不應將用戶數組存儲在組文檔中,而應將一組組數組存儲在用戶文檔中。那麼你的地圖功能可以是這樣的:

function(doc { 
    var i; 
    if(doc.type == 'user' && !doc.deletedAt) { 
    for (i = 0; i < doc.groups.length; ++i) { 
     emit(doc.groups[i], null); 
    } 
    } 
} 
+0

更改文檔結構將在應用的其他地方引進了一堆的問題,所以很遺憾,這不是我的選擇。 – Troy

+0

然後不幸的是它不會工作。 –