Deberá usar $geoNear , y solo si está utilizando V2.4 en adelante
db.users.aggregate(
{$geoNear : {
near: [-1, -2],
distanceField: "distance",
query : {"_id" : "id1"},
uniqueDocs: true,
maxDistance : 2000
}})
Editar:después de editar la pregunta
La siguiente consulta le dará la ubicación y la distancia, pero no recupera el _id interno (elemento de matriz)
db.users.aggregate(
{$geoNear : {
near: [-1, -2],
distanceField: "distance",
includeLocs: "location",
query : {"_id" : "id1"},
maxDistance : 2000
}},
{$project : {"location" : 1, "_id" : 0, "distance" : 1}}
)
Tenga en cuenta la adición de includeLocs
y eliminación de uniqueDocs: true
Para recuperar también el _id interno, tendrá que (siguiendo este ejemplo) relajarse y proyectar condicionalmente más o menos, pero no creo que valga la pena, a menos que necesite la dirección en lugar del _id