arbyter
arbyter

Reputation: 549

How to filter by document attributes in couchdb?

Could someone explain to me how I can filter documents with multiple attributes by using arrays and keys?

For example I have a document with the attribute a, b, c and d. I would like to filter by an user selected value from attribute "a". Later I would like to narrow the results with a value from the attribute "c" or maybe a value from the attribute from "d".

Does anyone have suggestions how to accomplish this task elegant?

Upvotes: 0

Views: 277

Answers (1)

Hans
Hans

Reputation: 2910

Assuming your doc looks like:

{ 'a': 123, 'b': 456, 'c': 789, ... }

You can create a view like this:

function(doc){
   emit([doc.a, doc.b, doc.c], doc)
}

You can then use the startkey and endkey parameters to access the views, whilst restricting results to a specific subset:

...&startkey=[123,]&endkey=[123,{}] // Shows all results with doc.a=123
...&startkey=[123,]&endkey=[123,456] // Shows all results with doc.a=123 and doc.b<=456

However all elements will be sorted in a single list and all you can ever access is a subsection of this list. So if you want to access documents where 123 <= doc.a <= 456 and doc.b between 123 and 456, you'll have to create two separate views, one for doc.a and one for doc.b and then have your client app identify the documents returned by both views.

Upvotes: 2

Related Questions