incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Simon Wex" <si...@simonwex.com>
Subject Basic re-understanding of reduce.
Date Wed, 24 Dec 2008 01:53:51 GMT
I have been working on a few projects with couchdb, some of which are
in production so it came as a complete surprise today when I realized
I don't understand CouchDB's reduce implementation.

I have a map that emits a complex key and a count of 1 for each
document. From that I end up with a data set like so:

{"id":"89c285e3-109f-4ce8-9a11-f5219c6a0b36","key":[341235,"auctioned"],"value":1},
{"id":"ab37e07a-d19e-4ddb-b0ab-7da8b5e24a03","key":[341235,"auctioned"],"value":1},
{"id":"b5cf63e0-1892-41df-833b-84468365a08a","key":[341235,"auctioned"],"value":1},
{"id":"89c285e3-109f-4ce8-9a11-f5219c6a0b36","key":[341235,"teasered","125"],"value":1},
{"id":"3341b67a-c789-492e-a9e7-1a3a99540c59","key":[341235,"teasered","127"],"value":1},
{"id":"7e6d6077-619b-4cec-8cc2-d2e8779cdc15","key":[341235,"teasered","127"],"value":1}...

Now what I want from my reduce if the above was the only output is to
end up with a set like so:

{"key":[341235,"auctioned"],"value":3},
{"key":[341235,"teasered","125"],"value":1},
{"key":[341235,"teasered","127"],"value":2}...

I thought my reduce statement would have to look simply like so:

function(keys, values) {
  return sum(values);
}

Much to my surprise, when I didn't get the numbers expected, I did
some logging from my reduce function:

{
  "keys": [
    [[341263,"teasered","125"],"e13d8135-844e-4fec-bf3a-ed189359b30c"],
    [[341263,"teasered","127"],"ae447f40-51cd-406e-8a65-f5a7f163d20e"], ...
  ],
 "values": [1,1,...],
 "rereduce": false
}

I thought that the reduce function was only called with results of the
same key. Essenially I think I was assuming that the functionality of
reduce when rereduce is true was always the case. Can someone help me
understand why a reduce function would get multiple keys for a single
reduce? Also, what should my reduce then look like?

Thanks for the help, Simon.

Mime
View raw message