Hi all,
I have problems solving the following problem with CouchDB and am
wondering if I'm trying to solve something for which Couch isn't
suitable, if there is something I have misunderstood or if there's some
hidden feature I haven't discovered yet.
I have documents with the following fields:
{
one_id : 1,
another_id : 22,
created_at : "2011-05-26",
a_name : "Lisa"
}
I want to search all occurrences with a combination of the three first
ones as query parameters and then count the number of a_name occurrences
within each of these search collections. For this reason, I put this
into my view/map.js: emit([one_id, another_id, created_at], a_name);
Now, using these keys and start/end key, I get the result rows I want.
So far so good.
My next step, is that I want to count the number of a_name within each
of these hits, producing a dictionary like:
{
"John" : 234142,
"Dominique" : 21177,
"Lisa" : 123
}
Initially, I tried to do this with a reduce.js, but couldn't work out
how I'd go about this. The documentation I've read on reduces only
mentions simple (built in) functions for counting and summing up the
total rows and what I want here are counts based on the values
themselves as "keys" in the view's result.
I've managed to get working using (exploiting?) lists, but this doesn't
scale well with 100 000s of rows.
For these reasons, I've resorted to doing two view operations, one to
get the initial results and one to get the count of each a_name within
the first result. This works, but doesn't feel optimal. Also, the
returned dataset of the first search is overwhelming, leading to a ~5-7
second download of the data (and putting nginx/gzip infront of Couch
didn't improve matters enough :-)
The total time it takes to do my two queries adds up to ~6-9 seconds,
something which is not fast enough for my application and I am therefore
seeking your guidance.
Cheers,
-Torstein