documentos de filtro mongodb con longitud, latitud y distancia particular

Mi diseño de esquema:

var LocationSchema = new Schema({
  area: String,
  loc: [
    type: [Number],  // [<longitude>, <latitude>]
    index: '2d'      // create the geospatial index
    ]

});

module.exports = mongoose.model('Location', LocationSchema);

Los datos se han almacenado como este mongodb

{
    "_id": {
        "$oid": "58c2796d734d1d46588666c6"
    },
    "area": "madiwla",
    "loc": [
        12.9226,
        77.6174
    ]
}
{
    "_id": {
        "$oid": "58c27989734d1d4658866705"
    },
    "area": "majestic",
    "loc": [
        12.9767,
        77.5713
    ]
}

{
    "_id": {
        "$oid": "58ca1e21734d1d2ca8566f3c"
    },
    "area": "shanthi nagar",
    "loc": [
        12.8486,
        77.6837
    ]
}

después de eso he hecho

db.locations.ensureIndex({loc:"2d"})

ahora quiero filtrar los datos dentro de 2 km o 5 m, cansé esta consulta, pero cada consulta cada vez que devuelve todos los documentos

He ejecutado una consulta de distancia máxima de 1 km

db.locations.find({ loc : { $near : [12.9592,77.6974] , $maxDistance : 100/111.12 } } )

di marathahalli latitud y longitud

distancia de marathahalli a madiwala: - 13.4 km

distancia de marathahalli a majestuosa: - 20.4 km

distancia de marathahalli a shanthi nagar: - 23.4 km

pero ¿por qué mi consulta devuelve todos los documentos. IS hay algún error en mi código por favor ayúdenme?

Intenté esto también pero recibí un error

db.locations.find({ loc : {
  $near: {
     $geometry: {
          loc: [12.9592,77.6974]
     },
     $maxDistance:0,
   ,  $minDistance:250
  }
} } )

Error: error: {
        "waitedMS" : NumberLong(0),
        "ok" : 0,
        "errmsg" : "invalid point in geo near query $geometry argument: { loc: [
 12.9592, 77.6974 ] }  Point must be an array or object",
        "code" : 2
}

Lo he intentado en mongoshell pero no obtengo nada

db.locations.createIndex({loc:"2dsphere"})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 3,
        "numIndexesAfter" : 3,
        "note" : "all indexes already exist",
        "ok" : 1
}
rs-ds161028:PRIMARY> db.locations.aggregate([ {$geoNear: { near :{type
 "Point", coordinates:[77.6974,12.9591]}, distanceField: "distance", spherical:
true } } ])

{ "_id" : ObjectId("58c27989734d1d4658866705"), "area" : "majestic", "loc" : [
2.9767, 77.5713 ], "distance" : 8017976.609884486 }
{ "_id" : ObjectId("58c2796d734d1d46588666c6"), "area" : "madiwla", "loc" : [ 1
.9226, 77.6174 ], "distance" : 8021105.860532911 }
{ "_id" : ObjectId("58ca1e21734d1d2ca8566f3c"), "area" : "shanthi nagar", "loc"
: [ 12.8486, 77.6837 ], "distance" : 8025509.538529409 }

rs-ds161028:PRIMARY>  db.locations.find({ loc:{ $near:{ $geometry: {ty
e: "Point" , coordinates:[77.6974,12.9591] }, $maxDistance:10000 }}})
rs-ds161028:PRIMARY>

Respuestas a la pregunta(1)

Su respuesta a la pregunta