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)
但是我无法从这里前进.我该如何更改地图功能以减少结果?
地图功能.主要是你的,但是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)
| 归档时间: |
|
| 查看次数: |
2718 次 |
| 最近记录: |