As the docs you quote indicate, you can’t use $lookup on a sharded collection. So the best practice workaround is to perform the lookup yourself in a separate query.
- Perform your
aggregatequery. - Pull the “localField” values from your query results into an array, possibly using
Array#map. - Perform a
findquery against the “from” collection, using a query like{foreignField: {$in: localFieldArray}} - Merge your results into whatever format you need.
Don’t let the $lookup limitation stop you from sharding collections that require it for scalability, just perform the lookup function yourself.