我们目前有一个CouchDB数据库,其中包含一些从其他文档创建的文档。这在文档中用'分叉'字段表示。根据链接文档的值减少CouchDB
例如:
{
"_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}
]}
然而,我们想的是只返回具有设置为“公共”权限的文件,从而使查询结果如下:
{"rows":[
{"key":"doc_2","value":1}
]}
doc_1
不应该返回,因为它是私人的。
似乎我不能在地图阶段过滤结果,因为我只有文档ID,而不是要检查的整个文档。我尝试使用链接文档功能将文档添加到密钥中,并在映射的emit
中包含{'_id': doc.forked_from}
,但CouchDB以'include_docs对于缩小视图无效'作出响应。
有关如何过滤此视图结果的任何建议?
你的意思是,原来的文件是公开的?还是叉子? –
我的意思是原始文档的权限,我添加了一个示例来帮助澄清。 – Jud