mapreduce - 在 couchbase 中编写 reduce 函数

标签 mapreduce couchbase

这是我第一次尝试 couchbase。我的 json 文档如下所示:

{
   "member_id": "12345",
   "devices": [
       {
           "device_id": "1",
           "hashes": [
               "h1",
               "h2",
               "h3",
               "h4"
           ]
       },
       {
           "device_id": "2",
           "hashes": [
               "h1",
               "h2",
               "h3",
               "h4",
               "h5",
               "h6",
               "h7"
           ]
       }
   ]
}

我想创建一个 View ,它告诉我给定哈希的所有 member_ids。

像这样的东西:
h1["12345","233","2323"]  //233,2323 are other member id    
h2["12345"]
member_id应该在集合中出现一次。

我写了一个 map 功能
function (doc, meta) {
  for(i=0;i< doc.devices.length;i++)
  {
    for(j=0;j< doc.devices[i].hashes.length;j++)  {
        emit(doc.devices[i].hashes[j],null)
          }
  }
}

这返回
h1 "12345"
h1 "12345"
h2 "12345"
h1 "233"

但我无法从这里继续前进。我应该如何更改我的 map 功能以减少结果?

最佳答案

map 功能。主要是你的,但发出 meta.id作为一个值。

function(doc, meta) {
  for(i=0; i< doc.devices.length; i++) {
    for(j=0; j< doc.devices[i].hashes.length; j++)  {
      emit(doc.devices[i].hashes[j], meta.id)
    }
  }
}

减少功能。只是从值返回唯一的数组(取自 https://stackoverflow.com/a/13486540/98509 )
function(keys, values, rereduce) {
  return values.filter(function (e, i, arr) {
    return arr.lastIndexOf(e) === i;
  });
}

关于mapreduce - 在 couchbase 中编写 reduce 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177986/

相关文章:

hadoop - 运行HbaseMapreduce程序时发生ClassNotFound异常

hadoop - 分布式缓存/文件和单节点Hadoop

hadoop - 带有错误 2999 的 pig 脚本参数

javascript - MongoDB MapReduce 显示 "[object Object]"作为键,尽管针对它们进行了类型检查

spring-data-jpa - 如何将 Spring 数据查询记录到 Couchbase 数据库

java - Spring & Couchbase - 如何通过代码创建索引

java - Couchbase - 根据 TTL 删除旧文档

c - "exptime"中的 "lcb_store_cmd_t"单元是什么?秒、毫秒还是其他?

沙发底座/N1QL : SELECT FROM list of values provided by parameter

r - 调试 R 中的 mapreduce() 函数