// I am creating an accounting app; the transactions are stored using the following doc: { "_id": "405b791b64424d12e03c12e6e5001535", "_rev": "1-97d53ba31a6ebb8c0508d0fc8776fac5", "type": "transaction", "account": "account_id", "payee": "Gas Company", "description": "May Bill", "date": "2009/05/25", "status": "cleared", "category": "Bills / Gas", "value": -5000 } // Or they can be split acroll multiple accounts / categories / etc. In this case split over two categories: { "_id": "405b791b64424d12e03c12e6e5002532", "_rev": "1-da46384d5f9fbfd26acbf8fc9a8e82fe", "type": "transaction", "account": "account_id", "payee": "Credit Card Company", "description": "May Statement", "date": "2009/06/02", "status": "uncleared", "category": "Debt / Credit Card Payments", "value": -5000, "split": [ { "category": "Dept / Default Charges", "value": -1000 } ] } // I have made a view to display all the unique categories in use across all transactions. // MAP function (doc) { if (doc.type && doc.type == 'transaction') { if (doc.category) emit(doc.category); if (doc.split) doc.split.map(function (spl) { if (spl.category) emit(spl.category); }); } } // REDUCE function(keys, values, rereduce) { return true; } // CURRENT OUTPUT OF VIEW (with group=true) { "rows": [ { "key": "Debt / Credit Card Payments", "value": true }, { "key": "Bills / Gas", "value": true } ] } // CURRENT OUTPUT OF VIEW WHEN RUN AS A TEMPORARY VIEW (with group=true) { "rows": [ { "key": "Dept / Default Charges", "value": true }, { "key": "Debt / Credit Card Payments", "value": true }, { "key": "Bills / Gas", "value": true } ] } // SIMPLE TEST VIEW function (doc) { if (doc.split) emit(null, doc.split); } // OUTPUT OF TEMP VIEW { "total_rows": 1, "offset": 0, "rows": [ { "id": "405b791b64424d12e03c12e6e5002532", "key": null, "value": [ { "category": "Dept / Default Charges", "value": -1000 } ] } ] } // OUTPUT OF SAME VIEW AFTER SAVE { "total_rows": 1, "offset": 0, "rows": [ { "id": "405b791b64424d12e03c12e6e5002532", "key": null, "value": [ ] } ] } /* It seems from the above that couch is for some reason returning the splits field as an empty array. Thanks for your time on IRC already. Cheers John */