couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Perryn Fowler <pezli...@gmail.com>
Subject Appropriate use of reduce
Date Sat, 29 Jan 2011 09:03:35 GMT
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

Mime
View raw message