Dovrai usare $geoNear , e solo se stai usando V2.4 in poi
db.users.aggregate(
{$geoNear : {
near: [-1, -2],
distanceField: "distance",
query : {"_id" : "id1"},
uniqueDocs: true,
maxDistance : 2000
}})
Modifica:dopo la modifica alla domanda
La query seguente ti darà posizione e distanza, ma non recupera l'elemento interno (array) _id
db.users.aggregate(
{$geoNear : {
near: [-1, -2],
distanceField: "distance",
includeLocs: "location",
query : {"_id" : "id1"},
maxDistance : 2000
}},
{$project : {"location" : 1, "_id" : 0, "distance" : 1}}
)
Nota l'aggiunta di includeLocs
ed eliminazione di uniqueDocs: true
Per recuperare anche l'_id interno, dovrai (seguendo questo esempio) rilassarti e proiettare in modo condizionale o giù di lì, ma non credo ne valga la pena, a meno che tu non abbia bisogno dell'indirizzo invece dell'_id