我在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 的文档,即“未读”消息。
答案 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