Constructor
# new CouchDBPaginator(adapter, query, size, clazz)
Implements pagination for CouchDB queries using bookmarks for efficient navigation through result sets
Paginator for ConuchDB query results
Parameters:
| Name | Type | Description |
|---|---|---|
adapter |
CouchDBAdapter.<any, any, any>
|
The CouchDB adapter |
query |
MangoQuery
|
The Mango query to paginate |
size |
number
|
The page size |
clazz |
Constructor.<M>
|
The model constructor |
Example
// Example of using CouchDBPaginator
const adapter = new MyCouchDBAdapter(scope);
const query = { selector: { type: "user" } };
const paginator = new CouchDBPaginator(adapter, query, 10, User);
// Get the first page
const page1 = await paginator.page(1);
// Get the next page
const page2 = await paginator.page(2);
Classes
- CouchDBPaginator
Initializes a paginator for CouchDB query results
- CouchDBPaginator
Initializes a paginator for CouchDB query results
Methods
# async page(pageopt) → {Promise.<Array.<R>>}
Executes the query with pagination and processes the results
Retrieves a specific page of results
sequenceDiagram
participant Client
participant CouchDBPaginator
participant Adapter
participant CouchDB
Client->>CouchDBPaginator: page(pageNumber)
Note over CouchDBPaginator: Clone statement
CouchDBPaginator->>CouchDBPaginator: validatePage(page)
alt page !== 1
CouchDBPaginator->>CouchDBPaginator: Check bookmark
alt No bookmark
CouchDBPaginator-->>Client: Throw PagingError
else Has bookmark
CouchDBPaginator->>CouchDBPaginator: Add bookmark to statement
end
end
CouchDBPaginator->>Adapter: raw(statement, false)
Adapter->>CouchDB: Execute query
CouchDB-->>Adapter: Return results
Adapter-->>CouchDBPaginator: Return MangoResponse
Note over CouchDBPaginator: Process results
alt Has warning
CouchDBPaginator->>CouchDBPaginator: Log warning
end
CouchDBPaginator->>CouchDBPaginator: Check for clazz
alt No clazz
CouchDBPaginator-->>Client: Throw PagingError
else Has clazz
CouchDBPaginator->>CouchDBPaginator: Find primary key
alt Has fields in statement
CouchDBPaginator->>CouchDBPaginator: Use docs directly
else No fields
CouchDBPaginator->>CouchDBPaginator: Process each document
loop For each document
CouchDBPaginator->>CouchDBPaginator: Extract original ID
CouchDBPaginator->>Adapter: revert(doc, clazz, pkDef.id, parsedId)
end
end
CouchDBPaginator->>CouchDBPaginator: Store bookmark
CouchDBPaginator->>CouchDBPaginator: Update currentPage
CouchDBPaginator-->>Client: Return results
end
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
page |
number
|
<optional> |
1 | The page number to retrieve |
If trying to access a page other than the first without a bookmark, or if no class is defined
PagingError
A promise that resolves to an array of results
Promise.<Array.<R>>
# protected prepare(rawStatement) → {MangoQuery}
Modifies the raw query to include pagination parameters
Prepares a query for pagination
Parameters:
| Name | Type | Description |
|---|---|---|
rawStatement |
MangoQuery
|
The original Mango query |
The prepared query with pagination parameters