2016-08-06 38 views
0

I Karte ansehen haben und reduzieren so: Karte:Wie kann ich ein map/reduce-Ergebnis erhalten, das in absteigender Reihenfolge des "value" -Wertes sortiert ist, wenn dies auch mit der list-Funktion erreicht werden kann?

function(doc) { 
      if(doc.type){ 
      var usersLength = doc.users.length; 
      for (var i = 0; i < usersLength ; i++) { 
        emit([doc.users[i].userid,doc.Service.ownId], 1); 
       } 
      } 
     } 

Reduce:

function(keys, values, rereduce) 
    { 
     return sum(values); 
    } 

dann die Ansicht wie folgt aufrufen: _design/aaa/_view/getUserId?group=true&group_level=2&startkey=["111111"]&endkey=["111111",{}]

ich das Ergebnis gesetzt unten gehen kann:

{"rows":[ 
{"key":["111111",""],"value":7}, 
{"key":["111111","FFFF26"],"value":1}, 
{"key":["111111","FFFF44"],"value":7}, 
{"key":["111111","FFFF34"],"value":2} 
]} 

Allerdings möchte ich das obige Ergebnis in absteigender Reihenfolge des "Wert" -Wertes erhalten. Wenn das auch mit der Listenfunktion möglich ist? Folgendes würde erwartete Ergebnisse werden:

{"rows":[ 
{"key":["111111",""],"value":7}, 
{"key":["111111","FFFF44"],"value":7}, 
{"key":["111111","FFFF34"],"value":2}, 
{"key":["111111","FFFF26"],"value":1} 
]} 
+0

CouchDB wird nur sortieren Ihre Ansicht basiert auf dem Schlüssel, für den sie bestimmt ist. Wenn Sie auch nach dem Wert sortieren möchten, können Sie wie bereits erwähnt eine Listenfunktion verwenden. –

Antwort

2

Wenn Sie das Ergebnis sortieren mögen einstellen, dass Sie eine, die nach Wert sortiert Sie absteigend mit einem Komparator Rückruf sortieren:

// ES6 Syntax 
let originalResult = { 
"rows":[ 
    {"key":["111111",""],"value":7}, 
    {"key":["111111","FFFF26"],"value":1}, 
    {"key":["111111","FFFF44"],"value":7}, 
    {"key":["111111","FFFF34"],"value":2} 
]} 

let newResult = { 
    rows: originalResult.rows.sort((a, b) => b.value - a.value) 
} 
+0

Vielen Dank für Ihren guten Vorschlag, wie können diese neuen Ergebnisse in einer Karte/Ansicht reduzieren? – Jamesjin

+0

Danke, ich denke, ich werde Listenfunktion verwenden, um auf diese – Jamesjin

+0

Hey Jamesjin, tut mir leid, niemand hat Ihre Frage basierend auf was Sie suchen beantwortet. Leider kenne ich couchdb nicht, also kann ich dir da nicht helfen, aber ich würde sagen, das klingt nach etwas, was du mit einer Frage tust. – Damon