2017-08-24 4 views
0

wollte ich eine Map-Funktion, die ein Ergebnis wie folgt zurückgibt:Couchbase Reduce ergibt nicht Ergebnis

{"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} 
... 
]} 

ich Schlüssel aus der Gruppe reduzieren wollen und geben die Anzahl der Werte der einzelnen Tasten sowie einige andere Berechnung der Werte.

Ich tat dies:

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; 
} 

Wenn ich fordern Sie die Ansicht mit der Taste ["00001","CADENCIER",0]

ich dieses Ergebnis:

{ 
    "productsNumber": 3, 
    "index": null 
} 

, die gar nicht das Ergebnis, das ich erwartet hatte .

PS: ich diese Optionen verwenden, um auszuwählen: connection_timeout = 600000000 & full_set = true & Gruppe = true & inclusive_end = true & key =% 5B% 2.200.001% 22% 22CADENCIER% 22,0% 5D & limit = 6 & reduzieren = true & überspringen = 0 & abgestanden = false

Antwort

1

Nicht alle Werte für einen bestimmten Schlüssel auf die Funktion zu einer Zeit reduzieren geben werden. Die MapReduce-Ansicht arbeitet mit Teilmengen der Daten, reduziert jede Teilmenge und kombiniert sie mit der gleichen Reduzierungsfunktion, bis alle Werte verarbeitet wurden.

Sie müssen das Argument rereduce verwenden, damit die Funktion die Ausgabe früherer Anrufe auf sich selbst reduzieren kann.

Von der Re-reduce Argument Dokumentation:

Um inkrementelle Karte zu handhaben/reduzieren Funktionalität (das heißt eine vorhandene Ansicht zu aktualisieren), muss jede Funktion auch in der Lage sein, die Funktionen eigene Ausgabe zu handhaben und konsumieren. Dies liegt daran, dass die Funktion in einer inkrementellen Situation sowohl die neuen Datensätze als auch zuvor berechnete Reduzierungen verarbeiten muss.

versuchen, etwas wie in diesem Beispiel aus dem 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); 
} 
Verwandte Themen