Hi Matthew,

multi-step reduction is (unfortunately) something plain CouchDB can't do at
all. So you're right that there's no easy way of doing it. However, from
the top of my head, you could emit a key [userId, '1_dept'] w/ value
department for each userRecord and a key [userid, '2_act'] for each
activity. When reducing w/ maximum detail and using _sum / _count or
_stats, you should get no sum for the '1_dept' part and the sum/count for
the '2_act' parts. You could then use a list-function to iterate over the
result (which should be small in comparison unless you're a really big
organization - and anyways, you won't ever need it in memory all at once)
and create a hash-table with entries per department. Each time you come
across a new '1_dept' value, you have a new hash key, as long as you get
'2_act' values, keep summing up (as the input to the list is the - ordered
- view result, you're good). Finally, just emit the stringified hashtable
as result of the list function.

Let us know how you did solve it in the end

Best
   Sebastian



On Tue, Apr 19, 2016 at 3:06 PM, Matthew Buckett <
[email protected]> wrote:

> I'm looking at trying to report on some data held in CouchDB, I have 2
> types of object stored, users and activities. An example user id:
>
> {
>   "_id": "37453929...",
>   userId: "1234",
>   type: "user",
>   name: "John Smith",
>   department: "english"
> }
>
> There will be multiple users and there is a small set of possible values
> for the department. An example activity is:
>
> {
>   "_id": "736489...",
>   userId: "1234",
>   type: "activity",
>   title: "Doing some work.",
>   hours: 2
> }
> each user will have multiple activities.
>
> I would like a view showing the total number of hours per department, but I
> can't see how to easily do it. I was initially thinking I could perform a
> map-reduce to build map the documents by userId, and then use a reduce to
> build a super document that contains the department and the hours together.
> So I ended up with something like:
>
> {
>   user: {.... department: "english" },
>   activites: [
>     {.. hours: 2 }, ...
>   ]
> }
>
> However this resulting document wouldn't be keyed on the department and I
> can't perform a further map-reduce to switch it to be keyed off the
> department.
>
> Thanks in advance.
>

Reply via email to