过滤couchdb链接的文档

时间:2013-06-20 06:27:53

标签: couchdb

我正在使用以下map函数来获取与组“链接”的用户文档:

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);
  }
}

一组如下:

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

用户看起来像:

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

map函数有效,但我需要过滤掉具有'deletedAt'属性集的用户文档。这在地图功能中是否可行?

1 个答案:

答案 0 :(得分:2)

如果不更改文档结构,则无法执行此操作。您应该在用户文档中存储一组组,而不是在组文档中存储用户数组。然后你的地图功能可能如下所示:

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