写入减少在couchbase中的功能

har*_*hit 4 mapreduce couchbase

这是我在couchbase的第一次尝试.我的json doc看起来像这样:

{
   "member_id": "12345",
   "devices": [
       {
           "device_id": "1",
           "hashes": [
               "h1",
               "h2",
               "h3",
               "h4"
           ]
       },
       {
           "device_id": "2",
           "hashes": [
               "h1",
               "h2",
               "h3",
               "h4",
               "h5",
               "h6",
               "h7"
           ]
       }
   ]
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个视图,它告诉我给定哈希的所有member_ids.

像这样的东西:

h1["12345","233","2323"]  //233,2323 are other member id    
h2["12345"]
Run Code Online (Sandbox Code Playgroud)

member_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],null)
          }
  }
}
Run Code Online (Sandbox Code Playgroud)

这回来了

h1 "12345"
h1 "12345"
h2 "12345"
h1 "233"
Run Code Online (Sandbox Code Playgroud)

但是我无法从这里前进.我该如何更改地图功能以减少结果?

avs*_*sej 5

地图功能.主要是你的,但是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)
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

减少功能.只是从值返回唯一数组(取自/sf/answers/944057831/)

function(keys, values, rereduce) {
  return values.filter(function (e, i, arr) {
    return arr.lastIndexOf(e) === i;
  });
}
Run Code Online (Sandbox Code Playgroud)