Internationalization 按couchdb文档的第2级和第4级关键字中的语言筛选
给定CouchDB中的以下文档Internationalization 按couchdb文档的第2级和第4级关键字中的语言筛选,internationalization,filter,couchdb,Internationalization,Filter,Couchdb,给定CouchDB中的以下文档 { "_id": "002bafd55b353692a7ab2968074310cc2cbff258", "_rev": "1-bc853056ac61d817ae3c4ecb4f81322b", "names": [ { "locale": "en", "value": "Example" }, { "locale": "de", "value": "Beispiel" }, { "locale": "fr",
{
"_id": "002bafd55b353692a7ab2968074310cc2cbff258",
"_rev": "1-bc853056ac61d817ae3c4ecb4f81322b",
"names": [
{ "locale": "en", "value": "Example" },
{ "locale": "de", "value": "Beispiel" },
{ "locale": "fr", "value": "Exemple" }
],
"details": [
{ "locale": "en", "value": "An Example is here" },
{ "locale": "de", "value": "Ein Beispiel ist heir" }
{ "locale": "en", "value": "Un exemple est ici" }
]
}
…如何编写一个视图,允许我返回包含
那些不受欢迎的语言被过滤掉了
curl..snip..'_设计/locale\u过滤器/?locale=en,de,fr,it'
curl..snip..'_设计/locale\u过滤器/?locale=en,fr'
curl..snip..'_设计/locale\u过滤器/?locale=en'
{
"_id": "002bafd55b353692a7ab2968074310cc2cbff258",
"_rev": "1-bc853056ac61d817ae3c4ecb4f81322b",
"names": [
{ "locale": "en", "value": "Example" },
],
"details": [
{ "locale": "en", "value": "An Example is here" },
]
}
还有一个子案例,文档有更深层的结构,
重复名称和详细结构,这些
在理想世界中过滤:
{
"_id": "002bafd55b353692a7ab2968074310cc2cbff258",
"_rev": "1-bc853056ac61d817ae3c4ecb4f81322b",
"names": [ ... snip ... ],
"details": [ ... snip ... ]
"deeper": {
"names": [
{ "locale": "en", "value": "Sub-Example" },
],
"details": [
{ "locale": "en", "value": "The Sub-Example is here" },
}
}
我还注意到,这可能不是一个视图,而是来自
文档couchdb说,show用于将文档转换为任何
格式
初学者的最后一个疑问是,是否有办法让它变得更简单
为了处理couchdb视图和设计文档,现在我正在试验
这让我觉得太过分了
我很确定我不想要沙发应用,我只是想轻松地维护我的视图
在磁盘上的文件,并同步他们与沙发数据库时,我做了
足够大的变化。我能够使用实现这一点,我实现了两个显示功能,一个是为了方便:
(doc, req) ->
all_locales = []
for name in doc.names
all_locales.push name.locale
toJSON(all_locales)
(我还在详细信息上实现了它,并在我的真实代码中删除了重复的区域设置)
这允许我执行以下操作:
GET /_design/dbname/_show/list_locales/c0db9ad..snip..
并返回[“en”、“de”、“fr”]
,例如,该语言所处的任何地区
然后,我可以使用该函数检索过滤后的文档:
(doc, req) ->
locales = req.query.locales.split(",")
doc.names = doc.names.filter (name) ->
locales.indexOf(name.locale) > -1
doc.overviews = doc.details.filter (overview) ->
locales.indexOf(overview.locale) > -1
return toJSON(doc) + "\n"
此应用程序的使用模式是:
GET /_design/dbname/_show/restrict_locales/c0db9ad..snip..?locales=en,fr
GET /_design/dbname/_show/restrict_locales/c0db9ad..snip..?locales=fr
GET /_design/dbname/_show/restrict_locales/c0db9ad..snip..?locales=en,fr,de,it,hu,zh
它运行得非常好,比我预期的要快得多。我相信CouchDB会主动缓存show函数结果