couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brian Candler <B.Cand...@pobox.com>
Subject Re: Finding with two fields
Date Thu, 22 Oct 2009 10:54:03 GMT
On Wed, Oct 21, 2009 at 08:21:50AM -0500, Nathan Stott wrote:
> You have two options.  1) use couchdb-lucene
> 2) emit multiple rows for each document.  something like this:
> function(doc) {
>     var iterDate = doc.startDate;
>     var endDate = doc.endDate;
>     while (iterDate < endDate) {
>         emit(iterDate);
>         iterDate.setDay(iterDate.getDay() + 1) // make this as fine-grained
> as you like
>     }
> }

Option (3): have views for startDate and endDate. Query the first view for
all docs with startDate < today, query the second view for all docs with
today < endDate, then intersect on the client.

Option (4): emit([startDate, endDate]), query for startDate < today, then
use a _list function to filter out matches with an endDate out of range.

These two options can get expensive with very large numbers of documents.
Option (2) above may be better, but can also get expensive with very wide
ranges between startDate and endDate.

A compromise is to take option (2) with large-grained buckets to get a set
of possible candidates, and then post-filter in the client or in _list.

Mime
View raw message