incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Guby <>
Subject Re: efficiency of temporary views
Date Wed, 30 Apr 2008 13:43:12 GMT
> Thanks Jan,
> That certainly makes it easier. I think I understand your warning
> regarding doubling of the data. Essentially a results of a view are
> pre-calculated when the view is save? So using the id's to then  
> retrieve
> the related object would be a lot more efficient in terms of storage.
> The trade off being multiple requests to get the actual objects?
Just as a side note:
The views are actually calculated or populated on the first request of  
the view (or when documents are saved if you activate that (

) and not when you save the view document itself.

> Would it be possible to retrieve all the documents in one request. If
> the id's where continuous it would be easy to use start_key and  
> end_key
> but what if they are dis-continuous?
It is actually not necessary that the children's ID's are sequential!
In Jan's example above you actually get all the children when you  
request the view, and therefore only have to make one request to the  
database to get all the relations!
The actual ID's of the children doesn't matter to much as they are  
using the parents ID as the key!

Using the following view:

>> function(doc) {
>>  for(var idx in doc.parents) {
>>    map(doc.parents[idx], doc);
>>  }
>> }

You could get all the children of the parent with ID "foo" like this:

GET /db_name/_view/relations/children_of?key=foo

As long as the design document has the ID "_design/relations" and the  
view the name "children_of"

If you happen to be programming in ruby you can see how I implemented  
this in CouchObject. The changes aren't in the current gem yet, but  
I'll push out a new gem soon. CouchObject now supports has_many,  
has_one and belongs_to relations using the view technique above.
You can get the code from the git repository at

Best regards

View raw message