Database

[{"_id":ObjectId("62c43a4128c8b27fda436536"),"item":"item1","location_1":{"type":"Point","coordinates":[76.22191167727965,10.929396489878417]},"location_2":{"type":"Point","coordinates":[76.2249520851109,10.97594496161423]}},{"_id":ObjectId("62c43a4128c8b27fda436537"),"item":"item2","location_1":{"type":"Point","coordinates":[50.22191167727965,10.929396489878417]},"location_2":{"type":"Point","coordinates":[10.2249520851109,10.97594496161423]}}]

Query

db.collection.aggregate([{$set:{distance:{$let:{vars:{dlon:{$degreesToRadians:{$subtract:[{$first:"$location_1.coordinates"},{$first:"$location_2.coordinates"}]}},dlat:{$degreesToRadians:{$subtract:[{$last:"$location_1.coordinates"},{$last:"$location_2.coordinates"}]}},lat1:{$degreesToRadians:{$last:"$location_1.coordinates"}},lat2:{$degreesToRadians:{$last:"$location_2.coordinates"}}},in:{/** Haversine formula: sin²(dLat / 2) + sin²(dLon / 2) * cos(lat1) * cos(lat2);*/$add:[{$pow:[{$sin:{$divide:["$$dlat",2]}},2]},{$multiply:[{$pow:[{$sin:{$divide:["$$dlon",2]}},2]},{$cos:"$$lat1"},{$cos:"$$lat2"}]}]}}}}},{$set:{distance:{/** Distance in Meters given by "6372.8 * 1000"*/$multiply:[6372.8,1000,2,{$asin:{$sqrt:"$distance"}}]}}}])

Result