【发布时间】:2013-06-04 16:33:36
【问题描述】:
我们目前有一个 CouchDB 数据库,其中包含一些从其他文档创建的文档。这在文档中用“forked-from”字段表示。
例如:
{
"_id":"doc_1",
"_rev":"1-a23f9403a1d86648b2a304f5a4c78c31",
"doctype":"entry",
"data":"foo",
"permissions":"private"
}
{
"_id":"doc_2",
"_rev":"1-9c15e43a8c8d4ce1b00af94b328d268d",
"doctype":"entry",
"data":"bar",
"forked_from":"doc_1"
"permissions":"public"
}
{
"_id":"doc_3",
"_rev":"1-b13c761e43121c074c44736826f3ce7e",
"doctype":"entry",
"data":"bat",
"forked_from":"doc_2"
"permissions":"private"
}
我们目前有一个 map/reduce 视图,它会返回一个文档被分叉的次数,它告诉我们最流行的是什么。
function (doc) {
if (doc.doctype === 'entry' && doc.forked_from) {
emit(doc.forked_from, 1);
}
}
function(keys, values, rereduce) {
return sum(values);
}
使用group=true 查询此视图的结果将是:
{"rows":[
{"key":"doc_1","value":1},
{"key":"doc_2","value":1}
]}
但是,我们希望只返回权限设置为“public”的文档,以便查询结果如下所示:
{"rows":[
{"key":"doc_2","value":1}
]}
doc_1 不应返回,因为它是私有的。
我似乎无法在 map 阶段过滤结果,因为我只有 doc id,而不是要检查的整个文档。我尝试使用链接文档功能将文档添加到键中,并在地图的 emit 中包含 {'_id': doc.forked_from},但 CouchDB 以“include_docs 对减少视图无效”进行响应。
关于如何过滤此视图的结果有什么建议吗?
【问题讨论】:
-
您的意思是原始文档是公开的吗?还是叉子?
-
我是指原文档的权限,我加了一个例子来帮助澄清。
标签: javascript couchdb