mapreduce - CouchDB view - reduce / group duplicate key values to array -


i've got view on couch db, outputs data in format:

{"rows":[ {"key":["partner1","voucher type 1"],"value":true}, {"key":["partner1","voucher type 2"],"value":true}, {"key":["partner2","voucher type 1"],"value":true}, {"key":["partner3","voucher type 1"],"value":true}, {"key":["partner4","voucher type 1"],"value":true} ]} 

what i'm trying 'group' partner | voucher type, in example above, return like:

partner1: ["voucher type 1", "voucher type 2"] partner2: ["voucher type 1"] partner3: ["voucher type 1"] partner4: ["voucher type 1"] 

currently, map reduce functions this:

map:

function(     emit([doc.partnername, doc.vouchertype], 1); } 

reduce:

function(keys, values) {     return true; } 

i'm querying group=true

i suspect need more in reduce function?

your aim not reduce amount of data, change format. not use reduce function, use list function.

function(head, req) {     var lastkey, row, dedup;      while (row = getrow()) {         if (row.key !== lastkey) {             dedup = {};             send('\n' + row.key + ': ');         }          if (!dedup[row.value]) {             if (row.key === lastkey) {                 send(', ');             }              dedup[row.value] = true;             send(row.value);         }          lastkey = row.key;     } } 

this 1 gives plaintext listing, can add whatever formatting desire, e.g. json.

partner1: voucher type 1, voucher type 2 partner2: voucher type 1 

if don't need de-duplication, it's simpler.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -