Het door u verstrekte document ziet er goed uit, ik heb ook een eenvoudige test gedaan met een korte versie van uw document en het werkt voor mij.
"_id" : ObjectId("530cb07c009d8c323b477957"),
"time_from" : ISODate("2014-02-25T15:02:20.714Z"),
"checkin" : [
{
"user_id" : 1,
"loc" : {
"type" : "Point",
"coordinates" : [
73.43,
42.22
]
}
}
]
db.testGeo.ensureIndex( { "checkin.loc" : "2dsphere" } );
Dus ik raad aan om andere documenten in de collectie te controleren, sommige kunnen een verkeerde indeling hebben voor de index. Zorg er ook voor dat de array-elementen van uw coördinaten geen strings zijn. Omdat dit document niet geldig is voor de 2dsphere-index:
"_id" : ObjectId("530cb07c009d8c323b477957"),
"time_from" : ISODate("2014-02-25T15:02:20.714Z"),
"checkin" : [
{
"user_id" : 1,
"loc" : {
"type" : "Point",
"coordinates" : [
"73.43",
"42.22"
]
}
}
]
Let op de aanhalingstekens voor de coördinatenelementen, waardoor ze strings zijn.
ANTWOORD OP DE OPMERKING: Mongo staat slechts één geospatiale index per verzameling toe. U hoeft dus niet het hele veldpad voor uw runCommand op te geven. Collectienaam is voldoende. Dit zou voor u moeten werken als de collectienaam checkin_20140222
is
db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})
Ik hoop dat het helpt!