Tags are stored as a list of strings inside the document:
{ "_id":"123BAC", "_rev":"946B7D1C", "type":"post", "subject":"I like Planktion", "author":"Rusty", "created":"2006-08-15T17:30:12Z-04:00", "body":"I decided today that I don't like baseball. I like plankton.", "tags":["plankton", "baseball", "decisions"] }
CouchDB Views
Retrieve all tags with their counts:
map
function(doc) { if (doc.type == 'post' && doc.tags) { doc.tags.forEach(function(tag) { emit(tag, 1); }); } }
reduce
function(keys, values) { return sum(values); }
Note: when retrieving data from this view, if the results are reduced to a single row, you may need to use the ?group=true option to get counts reduced by tag. This may be a feature in version 0.8.0 and forward? see HttpViewApi.
Retrieve documents by a specific tag:
map
function(doc) { if (doc.type == 'post' && doc.tags) { doc.tags.forEach(function(tag) { emit(tag, doc); }); } }