couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Anderson <jch...@apache.org>
Subject Re: Ordering results from reduce function
Date Fri, 08 Jan 2010 17:51:51 GMT
On Fri, Jan 8, 2010 at 6:10 AM, Borja Martín <borjam@dagi3d.net> wrote:
> Hi,
> suppose I have the typical view used to index the tags of a document:
>
> // map
> function(doc) {
>  for (var idx in doc.tags) {
>   emit(doc.tags[idx], 1);
>  }
> }
>
> // and then I have this reduce function to count how many documents I have
> for each given tag:
> function(key,values) {
>  return sum(values);
> }
>
> and with the following sample documents:
> { "tags" : ["foo", "foo bar"] },
> { "tags" : ["foo", "bar", "foo bar"]}
>
> I get these results:
> {"rows":[
>  {"key":"bar","value":1},
>  {"key":"foo","value":3},
>  {"key":"foo bar","value":2}
> ]}
>
> What I want to do is to get the results ordered by its value so I can know
> which are the most used tags for example. I know that the results are
> ordered by the key so I guess this could be done if I could use the value
> returned by the reduce on it while calling the emit function with something
> like emit([reduce_value, tag], null); Is there any way to accomplish that?
>

This is a common request, but not supported directly by CouchDB's
views -- to do this you'll need to copy the group-reduce query to
another database, and build a view to sort by value.

This is a tradeoff we make in favor of dynamic range queries and
incremental indexes.

Chris

> Has it sense or am I misunderstanding something?
>
> Thanks in advance
>
> Regards
>
> --
> def dagi3d(me)
>  case me
>   when :web then  "http://dagi3d.net"
>   when :twitter then "http://twitter.com/dagi3d"
>  end
> end
>



-- 
Chris Anderson
http://jchrisa.net
http://couch.io

Mime
View raw message