Database

[{"collection":"users","count":2,"content":{"name":{"type":"enum","values":["User A","User B"]},"coordinate":{"type":"enum","values":[{"coordinates":[180,90],"type":"Point"},{"coordinates":[-180,-90],"type":"Point"}]},"searchRadius":{"type":"enum","values":[50,100.0]}},"indexes":[{"name":"users_idx","key":{"coordinate":"2dsphere"}}]},{"collection":"cities","count":2,"content":{"name":{"type":"enum","values":["City A","City B"]},"coordinate":{"type":"enum","values":[{"coordinates":[180,90],"type":"Point"},{"coordinates":[-180,-90],"type":"Point"}]}},"indexes":[{"name":"cities_idx","key":{"coordinate":"2dsphere"}}]}]

Query

db.users.aggregate([{$lookup:{from:"cities",let:{"userCoordinate":"$coordinate","userSearchRadius":"$searchRadius"},as:"nearByCities",pipeline:[{$geoNear:{near:"$$userCoordinate",spherical:true,distanceField:"distance"}},{"$match":{$expr:{$lte:["$distance","$$userSearchRadius"]}}}]}},{$unwind:{path:"$nearByCities",preserveNullAndEmptyArrays:true}}])

Result