@parameter1/mongodb-pagination
Advanced tools
{ | ||
"name": "@parameter1/mongodb-pagination", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"type": "module", | ||
@@ -46,3 +46,3 @@ "description": "Cursor, offset, and embedded object pagination for MongoDB queries.", | ||
}, | ||
"gitHead": "e3b272f07896d98d5c9271982d3bdaa043e7eb0a" | ||
"gitHead": "4452f02765026eff268f0ee4555048068c9b90ef" | ||
} |
@@ -149,2 +149,11 @@ import { EJSON } from '@parameter1/mongodb-bson'; | ||
let positionPromise; | ||
const getPositionCount = async () => { | ||
const [search, replace] = sort.order === 1 ? [/"\$gt":/g, '"$lte":'] : [/"\$lt":/g, '"$gte":']; | ||
const stringified = EJSON.stringify(cursorQuery).replace(search, replace); | ||
const pageQuery = EJSON.parse(stringified); | ||
if (!positionPromise) positionPromise = collection.countDocuments({ $and: [pageQuery, query] }); | ||
return positionPromise; | ||
}; | ||
return { | ||
@@ -176,2 +185,11 @@ // use the base query, not the cursor query, to count all docs | ||
}, | ||
startingPosition: async () => { | ||
const { results } = await runQuery(); | ||
const inc = results.length ? 1 : 0; | ||
if (!cursor) return inc; | ||
const count = await getPositionCount(); | ||
if (direction === 'AFTER') return count + inc; | ||
return (count - results.length) + inc; | ||
}, | ||
endCursor: async () => { | ||
@@ -182,4 +200,12 @@ const { results } = await runQuery(); | ||
}, | ||
endingPosition: async () => { | ||
const { results } = await runQuery(); | ||
if (!cursor) return results.length; | ||
const count = await getPositionCount(); | ||
if (direction === 'AFTER') return count + results.length; | ||
return count; | ||
}, | ||
}, | ||
}; | ||
} |
@@ -98,2 +98,6 @@ import Joi from 'joi'; | ||
startOffset: offset, | ||
startingPosition: async () => { | ||
const { results } = await runQuery(); | ||
return offset + results.length ? 1 : 0; | ||
}, | ||
endOffset: async () => { | ||
@@ -113,4 +117,8 @@ const { results } = await runQuery(); | ||
}, | ||
endingPosition: async () => { | ||
const { results } = await runQuery(); | ||
return offset + results.length; | ||
}, | ||
}, | ||
}; | ||
} |
25503
5.33%728
4.45%