Hi Wout,

can you add this to http://wiki.apache.org/couchdb/View_Snippets?

Cheers
Jan
--

On 10 Apr 2009, at 14:32, Wout Mertens wrote:

Note to self: I now realize that the easiest way (perhaps the best) to do the below is to have your function be

map: function(doc) {
if (doc.Experiment)
for (i in doc.Conditions){
    emit([doc.Experiment, i], 1);
}
}

reduce: function(key,values,rereduce)
{
return sum(values);
}

This gives you rows like

{"key":["Something","X"],"value":3}
{"key":["Something","Y"],"value":4}

where value is the count.

You can replace 1 and the sum with null if you're not interested in the count.

This is way better than a unique() function because it calculates in constant time and memory and you can request subranges of values.

Wout.

On Mar 3, 2009, at 2:38 PM, Wout Mertens wrote:

I believe this has been covered in this thread:
http://markmail.org/thread/lwqfwlscrvilwm34

but I think a totally satisfactory answer was not found.

Wout.

On Mar 3, 2009, at 2:27 PM, Manolo Padron Martinez wrote:

Hi:

I'm really a newbie, and I have a newbie problem (and maybe a miss
conception of the way to work with couch).
I have a lot of documents with this form (that represents experiments with any number of conditions, so X and Y could be only X or even X,Y,Z...)

{
"Experiment":"something",
"Conditions":
    {
      "X":3,
      "Y":2
    }
}

And I have a view like:
MAP:

function(doc) {
if (doc.Experiment)
for (i in doc.Conditions){
    emit(doc.Experiment, i);
}
}

REDUCE:

function(key,values)
{
return values;
}

When I launch the view I get this:

{"rows":[{"key":"Something","value":["X","Y"]}, {"key":"Something2","value": ["X","Y","X","Y","X","Y","Z","X","Y","X","Y","X","Y","Z"]}]}



I would like to get what are the conditions for every experiment grouped by
experiment without repetitions (I mean something like)

{"rows":[{"key":"Something","value":["X","Y"]}, {"key":"Something2","value":["X","Y","Z"]}]}


Anyone could help me?

Regards from Canary Island

Manuel Padron Martinez




Reply via email to