incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Wout Mertens <wout.mert...@gmail.com>
Subject Re: [user] Obtaining unique values from a view
Date Fri, 10 Apr 2009 13:32:58 GMT
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
>


Mime
View raw message