CouchDB _changes-API 过滤器
CouchDB _changes-API filter
我正在尝试使 CouchDB 2.1.1 上的过滤 _changes-API 流正常工作,但我 运行 遇到了问题。
我只想通过包含字段 "type" 且值为 "article".
的更改提要接收文档
根据 documentation 这样的事情应该可行:
function (doc, req) {
if (doc.type && doc.type == 'article') {
return true;
}
return false;
}
我在名为 filters
的 _design 文档中使用 Fauxton 在名为 type_article
的新视图中创建了上述函数。当我点击视图时,我在那里看不到任何结果。
现在我想使用过滤器作为 GET 参数从数据库中检索过滤后的更改提要:
localhost:5984/my_database/_changes?filter=filters/type_article
CouchDB 的响应是
{"error":"not_found","reason":"missing json key: filters"}
你知道我如何让过滤器功能发挥作用吗?
PS:我也尝试使用'emit()'函数而不是返回true
和false
,这返回了预期的结果,但是当试图查询_changes
出现同样的错误。
我发现了问题。当您使用 Design Documents
菜单项旁边的小 + 号在 Fauxton 中创建视图时,您只能创建视图。视图不同于过滤器。
要创建适用于 _changes 提要的过滤器,请单击 'Create Document' 并创建如下文档:
{
"_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}"
}
}
这将创建一个名为 filters
的新设计文档,其功能为 type_article
。
请注意,您实际上可以将视图用作 _changes
的过滤器。在这种情况下,如果地图函数至少为它发出一条记录,则文档计数通过。
例如,如果设计文档(称为 "ddoc")看起来像这样:
{"views":
{"type_article":
{"map":
"function(doc) {
if (doc.type && doc.type == 'article') {
emit(doc.name);
}
}"
}
}
}
那么查询将类似于 localhost:5984/my_database/_changes?filter=_view&view=ddoc/type_article
。请注意缺少 _design
前缀和属性 filter
的关键字 _view
。这是相应文档部分的 link:[link]
这里唯一要注意的是这个过滤器实际上并没有使用内置的视图索引,因此并不比普通的过滤器函数快。
我正在尝试使 CouchDB 2.1.1 上的过滤 _changes-API 流正常工作,但我 运行 遇到了问题。 我只想通过包含字段 "type" 且值为 "article".
的更改提要接收文档根据 documentation 这样的事情应该可行:
function (doc, req) {
if (doc.type && doc.type == 'article') {
return true;
}
return false;
}
我在名为 filters
的 _design 文档中使用 Fauxton 在名为 type_article
的新视图中创建了上述函数。当我点击视图时,我在那里看不到任何结果。
现在我想使用过滤器作为 GET 参数从数据库中检索过滤后的更改提要:
localhost:5984/my_database/_changes?filter=filters/type_article
CouchDB 的响应是
{"error":"not_found","reason":"missing json key: filters"}
你知道我如何让过滤器功能发挥作用吗?
PS:我也尝试使用'emit()'函数而不是返回true
和false
,这返回了预期的结果,但是当试图查询_changes
出现同样的错误。
我发现了问题。当您使用 Design Documents
菜单项旁边的小 + 号在 Fauxton 中创建视图时,您只能创建视图。视图不同于过滤器。
要创建适用于 _changes 提要的过滤器,请单击 'Create Document' 并创建如下文档:
{
"_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}"
}
}
这将创建一个名为 filters
的新设计文档,其功能为 type_article
。
请注意,您实际上可以将视图用作 _changes
的过滤器。在这种情况下,如果地图函数至少为它发出一条记录,则文档计数通过。
例如,如果设计文档(称为 "ddoc")看起来像这样:
{"views":
{"type_article":
{"map":
"function(doc) {
if (doc.type && doc.type == 'article') {
emit(doc.name);
}
}"
}
}
}
那么查询将类似于 localhost:5984/my_database/_changes?filter=_view&view=ddoc/type_article
。请注意缺少 _design
前缀和属性 filter
的关键字 _view
。这是相应文档部分的 link:[link]
这里唯一要注意的是这个过滤器实际上并没有使用内置的视图索引,因此并不比普通的过滤器函数快。