couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Couchdb Wiki] Update of "View Snippets" by WoutMertens
Date Sun, 12 Apr 2009 07:14:08 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Couchdb Wiki" for change notification.

The following page has been changed by WoutMertens:
http://wiki.apache.org/couchdb/View_Snippets

The comment on the change is:
added info about how to get unique results

------------------------------------------------------------------------------
  }}}
  
  In SQL this would be something along the lines of {{{SELECT num_attachments FROM table GROUP
BY num_attachments}}} (but this would give extra output for rows containing more than one
attachment).
+ 
+ == Generating a list of unique values ==
+ 
+ Here we use the fact that the key for a view result can be an array. Suppose you have a
map that generates (key, value) pairs with many duplicates and you want to remove the duplicates.
To do so, use ([key, value], null) as the map output.
+ 
+ Call this with ''group=true'' or you only get ''null''.
+ 
+ {{{
+ map: function(doc) {
+   for (var i in doc.links)
+     emit([doc.parent, i], null);
+   }
+ }
+ reduce: function(keys, values) {
+    return null;
+ }
+ }}}
+ 
+ This will give you results like
+ {{{
+ {"rows":[
+ {"key":["thisparent","thatlink"],"value":null},
+ {"key":["thisparent","thatotherlink"],"value":null}
+ ]}
+ }}}
+ 
+ You can then get all the rows for the key "thisparent" with the view parameters ''startkey=["thisparent"]&endkey=["thisparent",{}]&inclusive_end=false''.
+ 
+ Note that the trick here is using the key for what you want to make unique. You can combine
this with the counting above to get a count of duplicate values:
+ 
+ {{{
+ map: function(doc) {
+   for (var i in doc.links)
+     emit([doc.parent, i], 1);
+   }
+ }
+ reduce: function(keys, values) {
+    return sum(values);
+ }
+ }}}
  
  == Retrieve the top N tags. ==
  

Mime
View raw message