couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Davis <paul.joseph.da...@gmail.com>
Subject Re: counting rows in range queries
Date Thu, 30 Jul 2009 00:48:05 GMT
On Wed, Jul 29, 2009 at 8:38 PM, Fabio Forno<fabio.forno@gmail.com> wrote:
> Hi,
> I've read many threads explaining how to count rows in view results,
> however I can't find any working solution for this particular case.
> I've a set of items divided in buckets, and each item has a posting
> date. I want to divide the items per bucket and sort them by their
> date, so I make a view with this key:
> [item.bucket, item.date]
>
> Now the difficult part. There are many consumers who retrieve the
> items from the buckets and each consumers knows the date of the last
> item it has retrieved, so I do a range query on the view with
> startkey=[item.bucket, last_date], endkey=[item.bucket, stopper]. This
> is fine, but if I want to tell the user how many items it has to
> retrieve before actually downloading them I can't do nothing but
> retrieving all the rows and start counting. Any idea for solving this
> with a proper map reduce, or some clever doc structure?
> The only possible solution I've found so far is storing marker
> documents for each possible consumer (containing just the item id) any
> time I post a new item in a bucket. These can be counted with a
> map/reduce and deleted when the items are retrieved, but I really
> don't like the solution since it requires too many writes.
>
> bye!
>
> --
> Fabio Forno, Ph.D.
> Bluendo srl http://www.bluendo.com
> jabber id: ff@jabber.bluendo.com
>


Does this not work?

//map
function(doc)
{
    emit(doc.bucket, doc.date);
}

//reduce
function(keys, values, rereduce)
{
    if(rereduce) return sum(values);
    return values.length;
}

// Number of rows
http://127.0.0.1:5984/db_name/_design/foo/_view/bar?startkey=[bucket,last_date_seen]&endkey=[bucket,blocker]

// Actual rows
http://127.0.0.1:5984/db_name/_design/foo/_view/bar?startkey=[bucket,last_date_seen]&endkey[bucket,blocker]&reduce=false

Or am I missing something?

Paul Davis

Mime
View raw message