Couchdb example: list as key

From wikinotes

Couchdb allows you to use arbitrary datastructures as keys. In order to make this useful for query parameters, you'll likely want to iterate over your key's values, and match against one of the values.

In this example we'll use tags attached to a tasklist as an excuse.


create documents

{
"_id": "go to grocery store",
"tags" ["daytime"]
}

{
"_id": "think up xmas gifts",
"tags": ["fun","daytime","nighttime"],
}

{
"_id": "stargaze",
"tags": ["fun","nighttime"]
}

creating view

Instead of yielding the entire list of tags, we are yielding every tag in every document.

# testdb/_design/testdg/_view/bytag
function( doc ){
	for (var i in doc.tags){
		emit( doc.tags[i], doc.id );
	}
}

querying

Query all documents with the tag "nighttime".

curl -X GET localhost:5984/testdb/_design/testdsg/_view/bytag?key="nighttime"
{"total_rows":2,"offset":0,"rows":[
{"id":"think up xmas gifts", "key":"nighttime",  "value":null},
{"id":"stargaze",            "key":"nighttime",  "value":null},
]}