Can I create multiple collections per database?

You could look into relational-pouch for something like this. Else you could do "3 databases per user." ;)


Couchdb does not have the concept of collections. However, you can achieve similar results using type identifiers on your documents in conjunction with Couchdb views.

Type Identifiers

When you save a document in Couchdb add a field that specifies the type. For example, you would store a friend like so:

{
  _id: "XXXX",
  type: "Friend",
  first_name: "John",
  ...
}

And you would store history like this:

{
  _id: "XXXX",
  type: "History",
  url: "http://www.google.com",
  ...
}

Both of these documents would be in the same database, and if you queried all documents on that database then you would receive both.

Views

You can create views that filter on type and then query those views directly. For example, create a view to retrieve friends like so (in Cloudant you can go to add new Design Document and you can copy and paste this directly):

{
  "_id" : "_design/friends",
  "views" : {
    "all" : {
      "map" : "function(doc){ if (doc.type && doc.type == 'Friend') { emit(doc._id, doc._rev)}}"
    }
  }
}

Let's expand the map function:

function(doc) {
  if (doc.type && doc.type == "Friend") {
    emit(doc._id, doc._rev);
  }
}

Essentially this map function is saying to only associate documents to this view that have type == "Friend". Now, we can query this view and only friends will be returned:

http://SERVER/DATABASE/_design/friends/_view/all

Where friends = name of the design document and all = name of the view. Replace SERVER with your server and DATABASE with your database name.

You can find more information about views here:

https://wiki.apache.org/couchdb/Introduction_to_CouchDB_views