Filter CouchDB\u-API过滤器
我试图在CouchDB 2.1.1上获得一个经过过滤的_changes-API流,但遇到了一些问题。 我只想通过包含值为“article”的字段“type”的changes提要接收文档 根据法律,这样的事情应该会起作用:Filter CouchDB\u-API过滤器,filter,couchdb,Filter,Couchdb,我试图在CouchDB 2.1.1上获得一个经过过滤的_changes-API流,但遇到了一些问题。 我只想通过包含值为“article”的字段“type”的changes提要接收文档 根据法律,这样的事情应该会起作用: function (doc, req) { if (doc.type && doc.type == 'article') { return true; } return false; } 我使用Fauxton在名为filters的设计文档中
function (doc, req) {
if (doc.type && doc.type == 'article') {
return true;
}
return false;
}
我使用Fauxton在名为filters
的设计文档中,在名为type\u article
的新视图中创建了上述函数。当我点击视图时,我没有看到任何结果
现在,我想使用过滤器作为GET参数从DB检索过滤后的更改提要:
localhost:5984/my\u database/\u changes?filter=filters/type\u article
CouchDB的反应是
{“错误”:“未找到”,“原因”:“缺少json键:筛选器”}
你知道如何让过滤器功能正常工作吗
PS:我还尝试使用'emit()'函数,而不是返回
true
和false
,这返回了预期的结果,但在尝试查询\u changes
时,出现了相同的错误 我发现了问题。在Fauxton中使用设计文档
菜单项旁边的小+符号创建视图时,只能创建视图。视图与过滤器不同。
要创建与_changes提要一起使用的过滤器,请单击“创建文档”,然后创建如下文档:
{
"_id": "_design/filters",
"filters": {
"type_article": "function (doc, req) {\n if (doc.type && doc.type == \"article\") {\n return true;\n } else { \n return false; \n}\n}"
}
}
{"views":
{"type_article":
{"map":
"function(doc) {
if (doc.type && doc.type == 'article') {
emit(doc.name);
}
}"
}
}
}
这将创建一个名为
过滤器的新设计文档,其中包含一个函数type\u article
只需注意,您实际上可以使用视图作为更改的过滤器。在这种情况下,如果map函数为其发出至少一条记录,则已计数的文档将被传递
例如,如果设计文档(称为“ddoc”)的外观如下所示:
{
"_id": "_design/filters",
"filters": {
"type_article": "function (doc, req) {\n if (doc.type && doc.type == \"article\") {\n return true;\n } else { \n return false; \n}\n}"
}
}
{"views":
{"type_article":
{"map":
"function(doc) {
if (doc.type && doc.type == 'article') {
emit(doc.name);
}
}"
}
}
}
然后查询看起来像localhost:5984/my\u database/\u changes?filter=\u view&view=ddoc/type\u article
。请注意,属性过滤器缺少设计前缀和关键字\u视图。以下是相关文档部分的链接:
这里唯一需要注意的是,该过滤器实际上没有使用内置的视图索引,因此没有比普通过滤器功能更快。非常有趣!谢谢分享!