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

时间:2014-06-23 12:46:06

标签: 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",
}

地图可能看起来像这样

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_level 1,并将组设置为true。内置函数_count返回每种语言的文档数(en的值为3,martian的值为1)。如何重新应用减少值?或者这应该在客户端完成?

1 个答案:

答案 0 :(得分:1)

我实际上会像这样编写你的地图逻辑:

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

我认为一目了然,它看起来更清晰,更容易理解。我实际上会保持计数减少而不是为此用法编写一个新的reduce函数,正如你所说的那样只是在应用程序层中进行过滤。