Internationalization 按couchdb文档的第2级和第4级关键字中的语言筛选

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",

给定CouchDB中的以下文档

{
   "_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函数结果