Você terá que usar $geoNear , e somente se você estiver usando a V2.4 em diante
db.users.aggregate(
{$geoNear : {
near: [-1, -2],
distanceField: "distance",
query : {"_id" : "id1"},
uniqueDocs: true,
maxDistance : 2000
}})
Editar:após editar a pergunta
A consulta abaixo fornecerá localização e distância, mas não recupera o _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}}
)
Observe a adição de
includeLocs
e eliminação de uniqueDocs: true
Para também recuperar o _id interno, você terá que (seguindo este exemplo) desenrolar e projetar condicionalmente ou algo assim, mas acho que não vale a pena, a menos que você precise do endereço em vez do _id