mongoose-aggregate-paginate-v2 icon indicating copy to clipboard operation
mongoose-aggregate-paginate-v2 copied to clipboard

How to optimize a $match'less paginate query?

Open vresetnikov opened this issue 1 year ago • 0 comments

Hello,

So the library allows to pass in an aggregation query that shapes the paginated results. One thing that I cannot seem to understand, is that since we are retrieving multiple unknown aggregated objects, the $match stage appears to be off the table. This makes more complex aggregation queries (such as the ones using $lookup stage very slow). For example:

Let's say I have products and containers collections. Products point to containers like so:

Product collection

{
_id: <mongo id>,
container: <container document id>,
<.. other product details>
}

Now, if I wanted to retrieve a specific container and $lookup its products, the query would be very fast because I could put $match in the beginning:

[MATCH container by container ID] [LOOKUP products that share the container id] [PROJECT]

However, with mongoose-aggregate-paginate-v2, I am now retrieving multiple resources, so the MATCH stage is lost, making the LOOKUP very slow?

Is there a way to counter this? What should I do?

vresetnikov avatar Apr 10 '23 10:04 vresetnikov