How to get array elements with coordinates falling within a sphere?

I have the following data

{
    "_id" : ObjectId("5a25ae0a1bbabc42b5446ddb"),
    "label" : "5489",
    "type" : "Ship",
    "locations" : [ 
        {
            "id" : ObjectId("5a25cb3e1bbabc5830164217"),
            "lastUpdate" : NumberLong(1512449994354),
            "location" : {
                "type" : "Point",
                "coordinates" : [ 
                    34.052288, 
                    35.390986
                ]
            }
        }, 
        {
            "id" : ObjectId("5a25cb3e1bbabc5830164218"),
            "lastUpdate" : NumberLong(1512449995145),
            "location" : {
                "type" : "Point",
                "coordinates" : [ 
                    34.048187, 
                    35.391211
                ]
            }
        }, 
        {
            "id" : ObjectId("5a25cb3e1bbabc5830164219"),
            "lastUpdate" : NumberLong(1512449995928),
            "location" : {
                "type" : "Point",
                "coordinates" : [ 
                    34.05717, 
                    35.370588
                ]
            }
        }, 
        {
            "id" : ObjectId("5a25cb3e1bbabc583016421a"),
            "lastUpdate" : NumberLong(1512449996696),
            "location" : {
                "type" : "Point",
                "coordinates" : [ 
                    34.044661, 
                    35.37248
                ]
            }
        }, 
        {
            "id" : ObjectId("5a25cb3e1bbabc583016421b"),
            "lastUpdate" : NumberLong(1512449997451),
            "location" : {
                "type" : "Point",
                "coordinates" : [ 
                    34.077495, 
                    35.312958
                ]
            }
        }
    ]
}

Now I have a specific coordinate (i.e. longitude and latitude) and I'm trying to retrieve all locations that are not more than 500 meters away from that coordinate.

So I tried the following query but it's including points that shouldn't be returned.

db.vehicles.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ 34.050134, 35.390943 ] },
        distanceField: "dist",
        maxDistance: 500,
        spherical: true
     }
   },
   {
       $project:{
           _id: 0, type: 0, label: 0, dist: 0
       }
   },
   {
       $unwind: "$locations"
   },
   {
       $project: {
           "loc": "$locations.location"
       }
   },
   {
       $match: {
           loc: {
               $geoWithin: {
                   $centerSphere: [ [ 34.050134, 35.390943 ], 500 ]
                }
           }
       }
   }
])

These are the returned results

/* 1 */
{
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            34.052288, 
            35.390986
        ]
    }
}

/* 2 */
{
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            34.048187, 
            35.391211
        ]
    }
}

/* 3 */
{
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            34.05717, 
            35.370588
        ]
    }
}

/* 4 */
{
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            34.044661, 
            35.37248
        ]
    }
}

/* 5 */
{
    "loc" : {
        "type" : "Point",
        "coordinates" : [ 
            34.077495, 
            35.312958
        ]
    }
}

What am I missing ?