需要有关 CouchDB 重写以查看具有多个参数的帮助
Need help on CouchDB rewrites for view with multiple arguments
原题在双杠下方。
这是一个更新,我希望得到更多帮助。
嗨,
我终于积极地回到了这方面。
在过去的一年里,我多次将这个项目排在优先级之外。
我很抱歉没有对你的回复发表评论,这真的给了我希望。
我有一个更简洁的方法,我相信已经取得了一些进展。
我现在在数据库中有大约 1900 个文档。
每个文档都有一个 "type" 键。
我制作了 30 个设计文档,每个 "type" 一个,每个文档都有一个名为 "all" 的视图,returns 该类型文档的所有行。
所以,现在我可以从浏览器执行 GET,如下所示:
dasvm01.com:5984/registryservice/_design/airplaneidtypes/_view/all
我的近期目标是将其缩短为:
dasvm01.com:5984/registryservice/airplaneidtypes
或
dasvm01.com:5984/registryservice/airplaneidtypes/全部
为此,我在 airplaneidtypes 设计文档中添加了重写功能:
{
"_id": "_design/airplaneidtypes",
"_rev": "11-c28b41a718017cbcd65f82f4acc611cb",
"views": {
"all": {
"map": "function (doc)
{ if(doc.ddoc === 'airplaneidtypes')
{ emit(doc._rev,doc); }
}"
}
},
"language": "javascript",
"rewrites": [
{
"from": "/airplaneidtypes",
"to": "registryservice/_design/airplaneidtypes/_rewrite",
"method": "GET"
}
]
}
现在我认为我需要更新 CouchDB daemon:vhosts 设置:
我尝试了一下,但我真的没有信心,而且它似乎不起作用/
在 Fauxton,我有:
daemons
auth_cache {couch_auth_cache, start_link, []}
...
vhosts {dasvm01.com:5984, /registryservice/_design/airplaneidtypes/_rewrite, []}
不确定这是不是:
- 关,
- 远方,
- 不正确的地方,
- 只需要引号...
你能告诉我什么?
我不明白 Fauxton 默认值中的表示法:
vhosts
Virtual hosts manager. Provides dynamic add of vhosts without restart, wildcards support and dynamic routing via pattern matching
[daemons]
vhosts={couch_httpd_vhost, start_link, []}
============================================= ===================
我正在努力让(任何)重写工作。我在这里和其他网站上都看过很多例子。我试图模仿这些解决方案,但没有成功。某种程度的混乱开始发挥作用,因为我将两个论点传递给我的观点。但是基于我在这里看到的例子 [10.5.11. /db/_design/design-doc/_rewrite/path1 这应该不是问题。
我有这样的看法:
{"dataProvider": {
"map": "function(doc) {
if(doc.dataProvider && doc.status) {
emit([doc.dataProvider, doc.status], doc);
}
}"
}
}
当我点击这个 URL 时,视图工作正常:
"//ddpspc28:8080/data_providers/_design/basic/_view/dataProvider?key=["TBC-ACT","unstable"]"
我想重写它,使 URL 看起来像这样:
"//ddpspc28:8080/data_providers/dataProvider?key=["TBC-ACT","unstable"]"
目前 returns:{"error":"not_found","reason":"missing"}
为了做到这一点,我在我的数据库 "data_providers" 的设计文档“_design/basic”中创建了一个名为 "rewrites" 的字段。在重写的价值中,我有这个:
"[
{ "from":"/dataProvider",
"to": "_view/dataProvider"
}
]”
我也试过这个:
“[
{ "from":"/dataProvider",
"to": "_design/basic/_view/dataProvider"
}
]”
我也试过这个:
“[
{ "from":"dataProvider",
"to": "/_design/basic/_view/dataProvider"
}
]”
我怀疑我可能还需要一个 "query" 组件来重写,但我很乐意在这一点上让重写采用 "dataProvider" 和任何后续内容并替换具有完全限定路径的数据提供者。
_design/basic
文档中定义的重写,访问地址:
//ddpspc28:8080/data_providers/_design/basic/_rewrite
.
因此,您的第一次和最后一次尝试都应该有效,但可以通过以下方式访问它们:
//ddpspc28:8080/data_providers/_design/basic/_rewrite/dataProvider
除非将重写与 virtual hosts 结合使用,否则重写不会很有用(减少 URL 大小)。结合虚拟主机是集中 API.
的好方法
我通常会添加一个没有视图的设计文档(称为 api
),该文档会重写为其他设计文档的视图等。
原题在双杠下方。 这是一个更新,我希望得到更多帮助。
嗨,
我终于积极地回到了这方面。 在过去的一年里,我多次将这个项目排在优先级之外。 我很抱歉没有对你的回复发表评论,这真的给了我希望。
我有一个更简洁的方法,我相信已经取得了一些进展。 我现在在数据库中有大约 1900 个文档。 每个文档都有一个 "type" 键。 我制作了 30 个设计文档,每个 "type" 一个,每个文档都有一个名为 "all" 的视图,returns 该类型文档的所有行。
所以,现在我可以从浏览器执行 GET,如下所示:
dasvm01.com:5984/registryservice/_design/airplaneidtypes/_view/all
我的近期目标是将其缩短为:
dasvm01.com:5984/registryservice/airplaneidtypes
或
dasvm01.com:5984/registryservice/airplaneidtypes/全部
为此,我在 airplaneidtypes 设计文档中添加了重写功能:
{
"_id": "_design/airplaneidtypes",
"_rev": "11-c28b41a718017cbcd65f82f4acc611cb",
"views": {
"all": {
"map": "function (doc)
{ if(doc.ddoc === 'airplaneidtypes')
{ emit(doc._rev,doc); }
}"
}
},
"language": "javascript",
"rewrites": [
{
"from": "/airplaneidtypes",
"to": "registryservice/_design/airplaneidtypes/_rewrite",
"method": "GET"
}
]
}
现在我认为我需要更新 CouchDB daemon:vhosts 设置: 我尝试了一下,但我真的没有信心,而且它似乎不起作用/ 在 Fauxton,我有:
daemons
auth_cache {couch_auth_cache, start_link, []}
...
vhosts {dasvm01.com:5984, /registryservice/_design/airplaneidtypes/_rewrite, []}
不确定这是不是: - 关, - 远方, - 不正确的地方, - 只需要引号...
你能告诉我什么? 我不明白 Fauxton 默认值中的表示法:
vhosts
Virtual hosts manager. Provides dynamic add of vhosts without restart, wildcards support and dynamic routing via pattern matching
[daemons]
vhosts={couch_httpd_vhost, start_link, []}
============================================= ===================
我正在努力让(任何)重写工作。我在这里和其他网站上都看过很多例子。我试图模仿这些解决方案,但没有成功。某种程度的混乱开始发挥作用,因为我将两个论点传递给我的观点。但是基于我在这里看到的例子 [10.5.11. /db/_design/design-doc/_rewrite/path1 这应该不是问题。
我有这样的看法:
{"dataProvider": {
"map": "function(doc) {
if(doc.dataProvider && doc.status) {
emit([doc.dataProvider, doc.status], doc);
}
}"
}
}
当我点击这个 URL 时,视图工作正常:
"//ddpspc28:8080/data_providers/_design/basic/_view/dataProvider?key=["TBC-ACT","unstable"]"
我想重写它,使 URL 看起来像这样:
"//ddpspc28:8080/data_providers/dataProvider?key=["TBC-ACT","unstable"]"
目前 returns:{"error":"not_found","reason":"missing"}
为了做到这一点,我在我的数据库 "data_providers" 的设计文档“_design/basic”中创建了一个名为 "rewrites" 的字段。在重写的价值中,我有这个:
"[
{ "from":"/dataProvider",
"to": "_view/dataProvider"
}
]”
我也试过这个:
“[
{ "from":"/dataProvider",
"to": "_design/basic/_view/dataProvider"
}
]”
我也试过这个:
“[
{ "from":"dataProvider",
"to": "/_design/basic/_view/dataProvider"
}
]”
我怀疑我可能还需要一个 "query" 组件来重写,但我很乐意在这一点上让重写采用 "dataProvider" 和任何后续内容并替换具有完全限定路径的数据提供者。
_design/basic
文档中定义的重写,访问地址:
//ddpspc28:8080/data_providers/_design/basic/_rewrite
.
因此,您的第一次和最后一次尝试都应该有效,但可以通过以下方式访问它们:
//ddpspc28:8080/data_providers/_design/basic/_rewrite/dataProvider
除非将重写与 virtual hosts 结合使用,否则重写不会很有用(减少 URL 大小)。结合虚拟主机是集中 API.
的好方法我通常会添加一个没有视图的设计文档(称为 api
),该文档会重写为其他设计文档的视图等。