You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@couchdb.apache.org by "Andrew Stuart (SuperCoders)" <an...@supercoders.com.au> on 2011/04/02 07:27:58 UTC

Need to get total rows of startkey/endkey range for paging

Hey there folks

I am issuing a query to a view which uses startkey and endkey to  
constrain the range of values to be retrieved from the view.  Within  
this I am using skip and limit to page through the results.

The problem is that I need the count of the number of total rows, not  
of the view, but of the range defined by startkey and endkey.

This is needed because I am putting the data into a paging grid, and  
the paging grid needs to know the total rows so it knows how big to  
make the grid and so it knows where the bottom is.

If you are interested here is a sample query:

http://192.168.1.108/couchdb/test/_design/blah/_view/by_surname2?startkey=%22s%22&endkey=%22s%E9%A6%99%22&_dc=1301721696775&page=4&skip=900&limit=300

Views do of course return the total number of items in the view, but I  
need not the total items in the view but the total items in the  
startkey/endkey range.

Can anyone suggest if this is possible?

thanks

Re: Need to get total rows of startkey/endkey range for paging

Posted by "Andrew Stuart (SuperCoders)" <an...@supercoders.com.au>.
Hi Robert, three points:

1: Your point is a good one Robert - how would the grid cope with the  
number of rows changing between page reads?  I'm using the new extjs4  
so I have asked this on their forum.

2: On the subject of "sending the count of the rows in the current  
startkey/endkey range along with the data",would it be possible to use  
a list to combine the count with the data, in effect putting two views  
together into one, the count view at the top, the data view underneath?

3: Am I correct in understanding that the linked list style pagination  
that you describe works, but only for serial page after page access?   
Random access to any given view page is not possible with this  
mechanism.

as


On 02/04/2011, at 9:17 PM, Robert Newson wrote:

How will your grid cope with the number of rows changing between your
first query to get the count and subsequently fetching the pages?

I don't think you can know the number of pages of results up front
like this. CouchDB pagination usually follows a different algorithm.
For pages of size N, you query with ?limit=N+1 and omit the N+1'th
from being displayed. If you get N+1 results, then you can display a
'next page' button. If it's selected, your startkey parameter is the
N+1'th key. To paginate correctly when your view has more than one row
for the same key, look at startkey_docid and endkey_docid.

Afaik, couchdb does not provide you with the information you need to
paginate correctly in the manner you describe. Other b-tree
implementations could give the number of rows between startkey/endkey
efficiently, and other databases could provide a Cursor that would
show you the results as of a point in time. CouchDB does neither.

B.

On 2 April 2011 07:44, Nils Breunese <N....@vpro.nl> wrote:
> If you set the reduce function of your view to '_count' you will get  
> the number of items. Query with ?reduce=false if you want to get the  
> items instead of just the count.
>
> See http://wiki.apache.org/couchdb/Built-In_Reduce_Functions for  
> more info on built-in reduce functions.
>
> Nils.
> ________________________________________
> Van: Andrew Stuart (SuperCoders) [andrew.stuart@supercoders.com.au]
> Verzonden: zaterdag 2 april 2011 7:27
> Aan: user@couchdb.apache.org
> Onderwerp: Need to get total rows of startkey/endkey range for paging
>
> Hey there folks
>
> I am issuing a query to a view which uses startkey and endkey to
> constrain the range of values to be retrieved from the view.  Within
> this I am using skip and limit to page through the results.
>
> The problem is that I need the count of the number of total rows, not
> of the view, but of the range defined by startkey and endkey.
>
> This is needed because I am putting the data into a paging grid, and
> the paging grid needs to know the total rows so it knows how big to
> make the grid and so it knows where the bottom is.
>
> If you are interested here is a sample query:
>
> http://192.168.1.108/couchdb/test/_design/blah/_view/by_surname2?startkey=%22s%22&endkey=%22s%E9%A6%99%22&_dc=1301721696775&page=4&skip=900&limit=300
>
> Views do of course return the total number of items in the view, but I
> need not the total items in the view but the total items in the
> startkey/endkey range.
>
> Can anyone suggest if this is possible?
>
> thanks
> ------------------------------------------------------------------------
>  VPRO   www.vpro.nl
> ------------------------------------------------------------------------
>
-- 
Message  protected by MailGuard: e-mail anti-virus, anti-spam and  
content filtering.http://www.mailguard.com.au/mg
Click here to report this message as spam:
https://login.mailguard.com.au/report/1C1zLU162M/4TuBaz4SFdI5mIkn4t3xuJ/0.002

Re: Need to get total rows of startkey/endkey range for paging

Posted by Robert Newson <ro...@gmail.com>.
How will your grid cope with the number of rows changing between your
first query to get the count and subsequently fetching the pages?

I don't think you can know the number of pages of results up front
like this. CouchDB pagination usually follows a different algorithm.
For pages of size N, you query with ?limit=N+1 and omit the N+1'th
from being displayed. If you get N+1 results, then you can display a
'next page' button. If it's selected, your startkey parameter is the
N+1'th key. To paginate correctly when your view has more than one row
for the same key, look at startkey_docid and endkey_docid.

Afaik, couchdb does not provide you with the information you need to
paginate correctly in the manner you describe. Other b-tree
implementations could give the number of rows between startkey/endkey
efficiently, and other databases could provide a Cursor that would
show you the results as of a point in time. CouchDB does neither.

B.

On 2 April 2011 07:44, Nils Breunese <N....@vpro.nl> wrote:
> If you set the reduce function of your view to '_count' you will get the number of items. Query with ?reduce=false if you want to get the items instead of just the count.
>
> See http://wiki.apache.org/couchdb/Built-In_Reduce_Functions for more info on built-in reduce functions.
>
> Nils.
> ________________________________________
> Van: Andrew Stuart (SuperCoders) [andrew.stuart@supercoders.com.au]
> Verzonden: zaterdag 2 april 2011 7:27
> Aan: user@couchdb.apache.org
> Onderwerp: Need to get total rows of startkey/endkey range for paging
>
> Hey there folks
>
> I am issuing a query to a view which uses startkey and endkey to
> constrain the range of values to be retrieved from the view.  Within
> this I am using skip and limit to page through the results.
>
> The problem is that I need the count of the number of total rows, not
> of the view, but of the range defined by startkey and endkey.
>
> This is needed because I am putting the data into a paging grid, and
> the paging grid needs to know the total rows so it knows how big to
> make the grid and so it knows where the bottom is.
>
> If you are interested here is a sample query:
>
> http://192.168.1.108/couchdb/test/_design/blah/_view/by_surname2?startkey=%22s%22&endkey=%22s%E9%A6%99%22&_dc=1301721696775&page=4&skip=900&limit=300
>
> Views do of course return the total number of items in the view, but I
> need not the total items in the view but the total items in the
> startkey/endkey range.
>
> Can anyone suggest if this is possible?
>
> thanks
> ------------------------------------------------------------------------
>  VPRO   www.vpro.nl
> ------------------------------------------------------------------------
>

RE: Need to get total rows of startkey/endkey range for paging

Posted by Nils Breunese <N....@vpro.nl>.
If you set the reduce function of your view to '_count' you will get the number of items. Query with ?reduce=false if you want to get the items instead of just the count.

See http://wiki.apache.org/couchdb/Built-In_Reduce_Functions for more info on built-in reduce functions.

Nils.
________________________________________
Van: Andrew Stuart (SuperCoders) [andrew.stuart@supercoders.com.au]
Verzonden: zaterdag 2 april 2011 7:27
Aan: user@couchdb.apache.org
Onderwerp: Need to get total rows of startkey/endkey range for paging

Hey there folks

I am issuing a query to a view which uses startkey and endkey to
constrain the range of values to be retrieved from the view.  Within
this I am using skip and limit to page through the results.

The problem is that I need the count of the number of total rows, not
of the view, but of the range defined by startkey and endkey.

This is needed because I am putting the data into a paging grid, and
the paging grid needs to know the total rows so it knows how big to
make the grid and so it knows where the bottom is.

If you are interested here is a sample query:

http://192.168.1.108/couchdb/test/_design/blah/_view/by_surname2?startkey=%22s%22&endkey=%22s%E9%A6%99%22&_dc=1301721696775&page=4&skip=900&limit=300

Views do of course return the total number of items in the view, but I
need not the total items in the view but the total items in the
startkey/endkey range.

Can anyone suggest if this is possible?

thanks
------------------------------------------------------------------------
 VPRO   www.vpro.nl
------------------------------------------------------------------------