Mapreduce Couchbase map reduce查询以获取标记列表

Mapreduce Couchbase map reduce查询以获取标记列表,mapreduce,couchbase,Mapreduce,Couchbase,如何从这样的文档集中计算所有唯一的语言 { "type": "post", "lang": "en", "title": "one", } { "type": "post", "lang": "en", "title": "two", } { "type": "post", "lang": "en", "title": "three", } { "type": "post", "lang": "martian", "title": "four

如何从这样的文档集中计算所有唯一的语言

{
  "type": "post",
  "lang": "en",
  "title": "one",
}

{
  "type": "post",
  "lang": "en",
  "title": "two",
}

{
  "type": "post",
  "lang": "en",
  "title": "three",
}

{
  "type": "post",
  "lang": "martian",
  "title": "four",
}
地图可能是这样的

function map(doc, meta) {
  if (meta.type !== "json") {
    return;
  }
  var type = doc["type"];
  if (!type || type !== "post") {
    return;
  }
  var lang = doc["lang"];
  if (!lang) {
    return;
  }
  emit(lang, null);
}

我使用
group\u级别
1,组设置为
true
。内置函数
\u count
返回每种语言的文档数(值3表示
en
,值1表示
martian
)。如何重新应用“减少到减少的值”?或者这应该在客户机上完成?

我实际上会这样编写映射逻辑:

function (doc, meta) {
  if(meta.type == "json") {
    if(doc.type && doc.type == "post") {
      if(doc.lang) {
        emit(doc.lang); 
      }
    }
  }
}

我认为它看起来更清晰,更容易理解,一目了然。实际上,我会保留count reduce,而不是为这种用法编写一个新的reduce函数,正如您所说,只需在应用程序层进行过滤。

我认为这是一个编码风格的问题,对于我来说,每个“if”都有细微的“else”,所以我喜欢使用“if not”卫兵们说得很清楚:)回到原来的问题——Couchbase似乎没有“重新导出”和“视图换视图”选项?我看到他们正在使用N1QL lang来跟上Mongo查询,但是N1QL在Couchbase Lite上不起作用。您可以在reduce部分实现您想要的功能,该部分也处理rereduces,但正如我所说的,这将是我在编码层处理的事情。祝你好运你能提供再教育的例子吗?因为从我所看到的,这是不可能的…我的意思是“减少已经减少的”,当然,不是重新减少