From 1b488a0bbe6b4ebe26ec9e941b3302486e0091ea Mon Sep 17 00:00:00 2001 From: Teodor Raykov Date: Thu, 16 Sep 2021 20:39:23 +0300 Subject: [PATCH] fix: getPaginatedResponseFromAggregate correct pageInfo and totalCount fixes #96 Signed-off-by: tedraykov --- lib/graphql/applyPaginationToMongoAggregate.js | 16 +++++++++++++--- lib/graphql/getPaginatedResponseFromAggregate.js | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/graphql/applyPaginationToMongoAggregate.js b/lib/graphql/applyPaginationToMongoAggregate.js index 8ce9217..efdb12f 100644 --- a/lib/graphql/applyPaginationToMongoAggregate.js +++ b/lib/graphql/applyPaginationToMongoAggregate.js @@ -34,7 +34,11 @@ export default async function applyPaginationToMongoAggregate(collection, pipeli if (last) { // Get the new count after applying before/after - const totalCount = await collection.aggregate(pipeline).count(); + const lastPipeline = [...pipeline]; + lastPipeline.push({ + "$count": "count" + }); + const totalCount = await collection.aggregate(lastPipeline).count; if (totalCount > last) { skip = totalCount - last; } @@ -54,7 +58,10 @@ export default async function applyPaginationToMongoAggregate(collection, pipeli prevPipeline.push({ "$skip": skip - 1 }); - const prevCursorCount = await collection.aggregate(prevPipeline).count(); + prevPipeline.push({ + "$count": "count" + }); + const prevCursorCount = await collection.aggregate(prevPipeline).count; hasPreviousPage = prevCursorCount > limit; } } @@ -67,7 +74,10 @@ export default async function applyPaginationToMongoAggregate(collection, pipeli nextPipeline.push({ "$limit": limit + 1 }); - const nextCursorCount = await collection.aggregate(nextPipeline).count(); + nextPipeline.push({ + "$count": "count" + }); + const nextCursorCount = await collection.aggregate(nextPipeline).count; hasNextPage = nextCursorCount > limit; } diff --git a/lib/graphql/getPaginatedResponseFromAggregate.js b/lib/graphql/getPaginatedResponseFromAggregate.js index 4b6bf32..46d564f 100644 --- a/lib/graphql/getPaginatedResponseFromAggregate.js +++ b/lib/graphql/getPaginatedResponseFromAggregate.js @@ -66,7 +66,7 @@ async function getPaginatedResponseFromAggregate(collection, pipeline, args, { * Set `totalCount` inside of our objects, since we'll replace the root in the next stage. */ $set: { - "$objects.totalCount": "$totalCount" + "objects.totalCount": "$totalCount" } }, { /**