It will stop working when you have enough documents as, as you note, you don't reduce in your reduce function (and reducing is mandatory).
You don't need a reduce at all to 'collate by key'. Remove your reduce and query with ?key=<name of key> and you'll get all rows for that value. B. On Sat, Jan 29, 2011 at 9:03 AM, Perryn Fowler <[email protected]> wrote: > Hi there, > > I have a heap of documents that record several measurements for a > given day - for example for temperatures one might look like > > { > "_id" : "whatever", > "_rev" : "whatever", > "date" : "29/1/2011", > "hi-temp" : 30 > "low-temp" : 16 > } > > I would like to generate graphs from this data, and my graphing > library wants it in this format > > { > "hi-temp" : [ [ "29/1/2011", 30], [ "28/1/2011", 32], [ "27/1/2011", > 29], ...etc ], > "low-temp" : [ [ "29/1/2011", 16], [ "28/1/2011", 17], [ > "27/1/2011", 10], ...etc ] > } > > So, I wrote the following map function > > function(doc) { > function(doc) { > for ( var key in doc) { > if (key[0] != '_' && key != "date") { > emit(key,[doc.date,doc[key]]) > } > } > } > } > > and the following reduce function > > function(keys, values, rereduce) { > return values; > } > > and that all seems to work :) > > Two things bother me though... > > 1) I suspect that if a re-reduce call happened things would break > because I would end up with triple nested arrays (rather than double) > so perhaps I should be flattening the values array before returning > on a re-reduce ? But I am not sure, and so far I dont seem to be > getting any re-reduce calls. > Is there any way of forcing re-reduces to happen so I can test? > > 2) I'm not actually reducing in the reduce function, just using it to > collate by key - and CouchDB docs are to be littered with warnings > against doing that sort of thing. > Is there some other way I should be doing this with couch? Or is > couch a poor fit for this problem? > > cheers > Perryn >
