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
Post a Comment