couchdb-检索数组属性中未包含id的文档
我在couchdb数据库中有以下文档结构:couchdb-检索数组属性中未包含id的文档,couchdb,mapreduce,Couchdb,Mapreduce,我在couchdb数据库中有以下文档结构: { 'type': 'Message', 'subject': 'Cheap V1@gr@', 'body': 'not spam', 'metadata': { 'participation': { 'read': [1,2,3] } } } read数组是已阅读消息的用户ID的列表。我可以轻松创建一个视图,允许我根据用户已阅读的消息筛选消息列表,如下所示: 映射函数 然后执行对用户\u id=1的查
{
'type': 'Message',
'subject': 'Cheap V1@gr@',
'body': 'not spam',
'metadata': {
'participation': {
'read': [1,2,3]
}
}
}
read
数组是已阅读消息的用户ID的列表。我可以轻松创建一个视图,允许我根据用户已阅读的消息筛选消息列表,如下所示:
映射函数
然后执行对用户\u id=1
的查询:
curl -X GET \
http://localhost:5984/couchrest/_design/Message/_view/included_in_read?key=1
我的问题是:如何编写视图/查询以返回用户id未包含在
read
数组中的文档,即“未读”消息。您可以使用以下映射功能
function(doc) {
if(!doc.metadata.participation.read)
emit(doc.user_id, doc);
}
然后执行用户_id=1的查询:
curl -X GET \
http://localhost:5984/couchrest/_design/Message/_view/included_in_read?key=1
您需要使用一种称为的技术 上面的链接是我在一封电子邮件中对它的描述,我在回答关于堆栈溢出的类似问题时对此进行了描述:
我认为您需要做的变化是为密钥发出一个2数组,
[user\u id,doc\u id]
。当您查询用户1234
的“点击次数”时,请使用?startkey=[1234,null]&endkey=[1234,{}]
仅显示该用户的点击次数。小提示:您不需要发出文档。\u id
,因为每行都有一个id
字段。使用emit(user\u id,1)
可以节省磁盘空间和带宽,加快速度。谢谢!我确实注意到该id在resultset中存在过两次,现在我明白了原因。您的解决方案不会发出read属性为false的所有文档吗?请尝试一次,让我知道结果。这是一个有趣的概念,我将运行它并返回报告。
curl -X GET \
http://localhost:5984/couchrest/_design/Message/_view/included_in_read?key=1