Damien, So this just the system reducing to enable group_level=3|2|1|0 (since my key is max 3 elements)? That does explain what I'm seeing in the logs. Very clever.
The interesting thing is that if I query the reduce in futon, I see only 10 rows (of 10) and the maximum value is 15. Though if I hit the view up with a simple GET request, I see what I expected. This may be a firefox caching issue, I'll dig a bit deeper and report anything of interest. Thanks for the speedy reply. -Simon On Tue, Dec 23, 2008 at 6:14 PM, Damien Katz <[email protected]> wrote: > You are using the reduce properly. CouchDb reduces everything regardless of > the keys. So what you are seeing is couchdb doing full reductions of > modified nodes during index updates. This gives you the option of reducing > across arbitrary key ranges. > > -Damien > > On Dec 23, 2008, at 8:53 PM, Simon Wex wrote: > >> 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. > > -- Simon Wex CTO and Co-Founder Zeep http://zeepmobile.com http://zeepmedia.com
