【发布时间】:2012-05-03 17:11:38
【问题描述】:
我在 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
我的问题是:我将如何编写视图/查询以返回用户 ID 不包含在 read 数组中的文档,即“未读”消息。
【问题讨论】:
-
小提示:您不需要发出
doc._id,因为每一行都有一个id字段。使用emit(user_id, 1)可以节省磁盘空间和带宽,加快速度。 -
谢谢!我确实注意到 id 在结果集中存在两次,现在我明白为什么了。