基于链接文档的值减少CouchDB
Reducing CouchDB based on value from linked document
我们目前有一个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);
}
并且用CCD_ 1查询该视图的结果将是:
{"rows":[
{"key":"doc_1","value":1},
{"key":"doc_2","value":1}
]}
然而,我们希望只返回权限设置为"public"的文档,这样查询的结果看起来像:
{"rows":[
{"key":"doc_2","value":1}
]}
不应返回doc_1
,因为它是私有的。
我似乎无法在映射阶段过滤结果,因为我只有文档id,而不是整个文档要检查。我尝试使用链接文档功能将文档添加到键中,并在映射的emit
中包含{'_id': doc.forked_from}
,但CouchDB的响应是"include_docs对reduce视图无效"。
关于如何筛选此视图的结果,有什么建议吗?
我是CouchDB的新手,但您应该阅读:
CouchDB加入
所以我认为您需要做的是利用复杂的键和group_level。这样做的方法是将你的地图功能结构为:
function (doc) {
if (doc.doctype === 'entry' && doc.forked_from) {
emit([doc.permissions, doc.forked_from], 1);
}
}
如果group=true,结果会是这样的:
{"rows":[
{"key":["private", "doc_1"],"value":1},
{"key":["public", "doc_2"],"value":1},
{"key":["private", "doc_3"],"value":1},
]}
为了只获取"公共"文档,您必须使用范围查询和group_level查询参数:
http://localhost/db/_design/entry/_view/getNumberForked?startkey=["public", 0]&endkey=["public", {}]&group_level=2
这会给你你的结果:
{"rows":[
{"key":["public", "doc_2"],"value":1}
]}
我希望这能帮助你解决问题。
你说你只有_id,但你已经检查了doc.forked_from的存在,所以doc.permissions肯定是可用的吗?
所以你的地图功能肯定是…
function (doc) {
if (doc.doctype === 'entry' && doc.forked_from && doc.permissions === 'public') {
emit(doc.forked_from, 1);
}
}
相关文章:
- 我该如何编写一个CouchDB视图,列出每个存储文档的大小
- 对couchdb数据库/视图中的所有文档运行脚本/查询
- 循环访问文档 (validate_doc_update) 中的 CouchDB 字段
- Couchdb 使用 key 连接两个文档
- 如何使用键为“@”的文档在 couchDB 中创建视图
- “compilation_error”在我的 CouchDB 设计文档中的列表函数中
- CouchDB:访问_design视图或提取文档字段的替代方法是什么
- 在 Couchdb ( 虹膜沙发 ) POST 请求中添加新文档失败,状态为 500
- 如何以可读的方式格式化CouchDB设计文档
- CouchDB更新处理程序:文档id不能为空
- 使用CouchDB和Backbone按Id获取文档
- 是否有一个内置函数可以将创建日期添加到couchDB中的文档中
- Couchdb/Pouchdb多个用户和多个文档之间的关系
- 是否有关于couchDB中使用的Date对象的官方文档
- 如何在couchdb中从两个json文档中找到匹配的数据
- 如何对从CouchDB检索到的文档调用函数
- 基于链接文档的值减少CouchDB
- 在couchdb文档中使用javascript和html向现有文档添加字段的最简单方法
- CouchDB文档映射修改
- 获取带有外部参数的couchDB文档