couchdb - 检索数组属性中未包含id的文档

时间:2012-05-03 17:11:38

标签: couchdb mapreduce

我在couchdb数据库中有以下文档结构:

{
  'type': 'Message',
  'subject': 'Cheap V1@gr@',
  'body': 'not spam',
  'metadata': {
    'participation': {
      'read': [1,2,3]
    }
  }
}

read数组是已阅读邮件的用户ID列表。我可以轻松创建一个视图,允许我按用户阅读的消息过滤消息列表,如下所示:

地图功能

function(doc) {
  doc['metadata']['participation']['read'].forEach(function(user_id) {
    emit(user_id, doc._id);
  });
}

然后执行user_id = 1的查询:

curl -X GET \
  http://localhost:5984/couchrest/_design/Message/_view/included_in_read?key=1

我的问题是:如何编写一个视图/查询来返回read数组中包含用户id为 NOT 的文档,即“未读”消息。

2 个答案:

答案 0 :(得分:1)

您需要使用名为the Thai massage的技术。

上面的链接是我在电子邮件中对它的描述,我在Stack Overflow上的类似问题的答案中描述了它:Find CouchDB docs missing an arbitrary field

我认为您需要做的变化是为密钥[user_id, doc_id]发出一个2数组。当您查询用户1234的“匹配”时,请使用?startkey=[1234,null]&endkey=[1234,{}]仅显示该用户的匹配。

答案 1 :(得分:0)

您可以使用以下地图功能

 function(doc) {
   if(!doc.metadata.participation.read)
     emit(doc.user_id, doc);
  }

然后执行user_id = 1的查询:

curl -X GET \
http://localhost:5984/couchrest/_design/Message/_view/included_in_read?key=1
相关问题