Database

[{"collection":"persons","count":2,"content":{"name":{"type":"enum","values":["Person A","Person B"]},"location":{"type":"enum","values":[{"coordinates":[180,90],"type":"Point"},{"coordinates":[-180,-90],"type":"Point"}]}},"indexes":[{"name":"persons_idx","key":{"location":"2dsphere"}}]},{"collection":"places","count":2,"content":{"name":{"type":"enum","values":["Store A","Store B"]},"location":{"type":"enum","values":[{"coordinates":[180,90],"type":"Point"},{"coordinates":[-180,-90],"type":"Point"}]}},"indexes":[{"name":"places_idx","key":{"location":"2dsphere"}}]}]

Query

db.persons.aggregate([{$lookup:{from:"places",let:{"personPoint":"$location"},as:"nearestPlace",pipeline:[{$geoNear:{near:"$$personPoint",spherical:true,distanceField:"distance",maxDistance:50}},{$unwind:"$location"}]}},{$unwind:{path:"$nearestPlace",preserveNullAndEmptyArrays:true}}])

Result