Database
db={nodes:[{_id:0,power:"tower",location:{type:"Point",coordinates:[12.4800,41.9237]}},{_id:1,power:"tower",location:{type:"Point",coordinates:[12.4583,41.9129]}},{_id:2,power:"tower",location:{type:"Point",coordinates:[12.4974,41.9126]}},{_id:3,power:"tower",location:{type:"Point",coordinates:[12.4856,41.9283]}}]}
Query
db.nodes.aggregate([{$match:{power:"tower"}},{$lookup:{from:"nodes",as:"closestNode",let:{long:{$multiply:[{$first:"$location.coordinates"},0.017452778]},lat:{$multiply:[{$last:"$location.coordinates"},0.017452778]}},pipeline:[{$match:{power:"tower"}},{$set:{lat:{$multiply:[{$last:"$location.coordinates"},0.017452778]},long:{$multiply:[{$first:"$location.coordinates"},0.017452778]}}},{$set:{distFromMe:{$let:{vars:{dlon:{$subtract:["$long","$$long"]},dlat:{$subtract:["$lat","$$lat"]},rlon:{$divide:[{$multiply:[6378137,{$cos:{$avg:["$lat","$$lat"]}}]},{$sqrt:{$subtract:[1,{$multiply:[0.00669437,{$pow:[{$sin:{$avg:["$lat","$$lat"]}},2]}]}]}}]},rlat:{$divide:[{$multiply:[6378137,{$subtract:[1,0.00669437]}]},{$pow:[{$subtract:[1,{$multiply:[0.00669437,{$pow:[{$sin:{$avg:["$lat","$$lat"]}},2]}]}]},1.5]}]}},in:{$max:[{$sqrt:[{$add:[{$pow:[{$multiply:["$$dlon","$$rlon"]},2]},{$pow:[{$multiply:["$$dlat","$$rlat"]},2]}]}]},1]}}}}},{$sort:{distFromMe:1}},{$skip:1},{$limit:1},{$project:{distFromMe:1}}]}},{$set:{closestNode:{$first:"$closestNode"}}},{$sort:{"closestNode.distFromMe":1}},{$limit:1}])