Thanks for input Kai,

I gave this a try and it sort of worked. It did summarise all of the countries 
for me if I didn't pass in the  "startKey", "endKey". However, when I did it 
did not return any rows.

I've taken a different approach now anyway, I'll do the summary part client 
side since the document count will be relatively low anyway.

Might also take a look at Riak to see if this offers any additional flexibility 
in this area!

Thanks for you feedback!


On 7 Oct 2012, at 19:09, Kai Griffin <[email protected]> wrote:

> Carl, your problem sounds very familiar to me, but I'm not really sure if it 
> is quite the same as the problem I once had.  I had a fairly complex use-case 
> that involved summarising multiple values from multiple document types, being 
> able to search for these by date (in my case [year, month] or [year, 
> week_nbr]).  So my map/reduce has so much going on, I'm not sure the heart of 
> the issue is really same as yours or not.  I've done my best to distill this 
> down to your use-case... but there's one glaring issue in that my function 
> wants to use the country name as a key, and your country names contain 
> spaces, which won't work as keys.  So, I'm going to assume that they're 
> 2-letter country codes instead.  Also, I'm sure someone might say that I'm 
> abusing the reduce function... there might be a simpler way of doing this 
> with just one value to be summed.
> 
> map:
> {
>    var obj = {};
>    obj[doc.country] = 1;
>    emit ([date], obj)
> }
> 
> 
> reduce:
> {
>    var sums = {};
>    for (var i in values)
>       for (var k in values[i])
>           sums[k] = (sums[k] || 0) + values[i][k];
>    return sums;
> }
> 
> You can query using startkey,endkeys corresponding to the date range, and if 
> you set group_level=0 in your query,  you should end up with something like 
> this:
> 
> {"key":null, "value":{ UK:3, DE:1, HU:1, FR:2, US:1 }}
> 
> Which of course isn't quite the structure you might have been hoping for... 
> but it does give the right answer in a single row.
> 
> 
> 
> 
> On 06/10/2012 23:12, Carl Bourne wrote:
>> Yes - exactly!
>> 
>> Which was why I was hoping the reduce function would help. I have managed to 
>> do this using some additional middleware (Ruby Sinatra), but that seems to 
>> defeat the purpose of using something like Couch in the first place!
>> 
>> Carl Bourne | Senior Sales Engineer | mobile: +44 (0) 7770 284294 | 
>> www.venafi.com
>> 
>> On 6 Oct 2012, at 21:58, Aurélien Bénel <[email protected]> wrote:
>> 
>>>> I still not understand why you need to count the docs with the same exact 
>>>> timestamp
>>> Ah I think I understand now... You want to select by (exact) date but group 
>>> by countries.
>>> Hmm, then it's not hierarchical, you have two different dimensions. Then my 
>>> solution cannot help you. Sorry.
>>> 
>>> 
>>> Regards,
>>> 
>>> Aurélien
>>> 
>>> 
>> 
> 

Reply via email to