2017-08-24 8 views
0

を与える:私は、キーによってグループに削減し、各キーの値の数だけでなく、いくつかの他のを返すようにしたいCouchbaseのは、削減私はこのような結果を返すマップ機能していたかったのではない結果

{"total_rows":100995,"rows":[ 
{"id":"00001_372792","key":["00001","CADENCIER",0],"value":-0.1961035657664066}, 
{"id":"00001_372792","key":["00001","CADENCIER",0],"value":-0.1961035657664066}, 
{"id":"00001_386302","key":["00001","CADENCIER",0],"value":0.6934708647727543}, 
{"id":"00001_386302","key":["00001","CADENCIER",0],"value":0.6934708647727543}, 
{"id":"00001_386963","key":["00001","CADENCIER",0],"value":0.6922628824612621}, 
{"id":"00001_386963","key":["00001","CADENCIER",0],"value":0.6922628824612621}, 
{"id":"00001_387089","key":["00001","CADENCIER",0],"value":0.6919048724571887}, 
{"id":"00001_387089","key":["00001","CADENCIER",0],"value":0.6919048724571887}, 
{"id":"00001_387091","key":["00001","CADENCIER",0],"value":0.6919048724571887}, 
{"id":"00001_387091","key":["00001","CADENCIER",0],"value":0.6919048724571887}, 
{"id":"00001_387099","key":["00001","CADENCIER",0],"value":0.6921140124188077}, 
{"id":"00001_387099","key":["00001","CADENCIER",0],"value":0.6921140124188077}, 
{"id":"00001_387105","key":["00001","CADENCIER",0],"value":0.6921140124188077}, 
{"id":"00001_387105","key":["00001","CADENCIER",0],"value":0.6921140124188077}, 
{"id":"00001_387193","key":["00001","CADENCIER",0],"value":0.6936603115840247}, 
{"id":"00001_387193","key":["00001","CADENCIER",0],"value":0.6936603115840247}, 
{"id":"00001_387848","key":["00001","CADENCIER",1],"value":-0.29332158594360835}, 
{"id":"00001_387848","key":["00001","CADENCIER",1],"value":-0.29332158594360835}, 
{"id":"00001_388313","key":["00001","CADENCIER",1],"value":-0.0461553701861542}, 
{"id":"00001_388313","key":["00001","CADENCIER",1],"value":-0.0461553701861542}, 
{"id":"00001_388806","key":["00001","CADENCIER",1],"value":-0.04833054041013961}, 
{"id":"00001_388806","key":["00001","CADENCIER",1],"value":-0.04833054041013961}, 
{"id":"00001_388897","key":["00001","CADENCIER",1],"value":-0.25761199232338083}, 
{"id":"00001_388897","key":["00001","CADENCIER",1],"value":-0.25761199232338083}, 
{"id":"00001_435016","key":["00001","CADENCIER",1],"value":-0.037149057843773745}, 
{"id":"00001_435016","key":["00001","CADENCIER",1],"value":-0.037149057843773745} 
... 
]} 

を値の計算。

私はこれをしなかった:私は、キー["00001","CADENCIER",0]

を使用してビューを要求すると

function (key, values, rereduce) { 

    var result = {}; 
    var ecartsSum; 
    for(var i = 0; i < values.length; i++) { 
    ecartsSum =+ values[i]; 
    } 
    result.productsNumber = values.length; 
    result.index = 100 + (Math.tan(ecartsSum/values.length)) * 100 
    return result; 
} 

私はこの結果を得る:

私は期待していたすべての結果ではない
{ 
    "productsNumber": 3, 
    "index": null 
} 

PS:Iを選択するために、これらのオプションを使用: CONNECTION_TIMEOUT =6億& full_set =真&グループ=真& inclusive_end =真&キー=%5B%2200001% 22%22CADENCIER%22.0%5D &限界= 6 &削減=真&スキップ= 0 &陳腐= falseを

答えて

1

指定されたキーのすべての値を一度にreduce関数に渡されるわけではありません。 MapReduceビューは、データのサブセットで機能し、各サブセットを減らし、すべての値が処理されるまで同じreduce関数を使用して結合します。

引数はrereduce引数を使用する必要があります。これにより、以前の呼び出しからの出力を減らすことができます。 Re-reduce Argumentドキュメントから

(すなわち、既存のビューを更新する)/増分マップを処理する機能を低減するために、各機能はまた、ハンドルと機能を自分の出力を消費することができなければなりません。インクリメンタルな状況では、関数は新しいレコードと以前に計算されたリダクションの両方を処理する必要があるからです。

documentationから、この例のようなものを試してみてください:

function(key, values, rereduce) { 
    var result = {total: 0, count: 0}; 
    for(i=0; i < values.length; i++) { 
    if(rereduce) { 
     result.total = result.total + values[i].total; 
     result.count = result.count + values[i].count; 
    } else { 
     result.total = sum(values); 
     result.count = values.length; 
    } 
    } 
    return(result); 
} 
関連する問題