【问题标题】:Filtering couchdb linked documents过滤 couchdb 链接的文档
【发布时间】:2013-06-20 06:27:52
【问题描述】:

我正在使用以下地图功能从组中获取“链接”到的用户文档:

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
}

地图功能有效,但我需要过滤掉设置了“deletedAt”属性的用户文档。在地图功能中可以吗?

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    如果不更改文档的结构,您将无法做到这一点。与其在组文档中存储一组用户,不如在用户文档中存储一组组。那么你的地图函数可以如下所示:

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

    【讨论】:

    • 更改文档结构会在应用程序的其他地方引入一堆问题,所以很遗憾,这不是我的选择。
    猜你喜欢
    • 2023-03-19
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多