Предоставеният от вас документ ми изглежда добър, направих и прост тест с кратка версия на вашия документ и работи за мен.
"_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" } );
Затова предлагам да проверите други документи в колекцията, някои от тях може да са деформирани за индекса. Също така се уверете, че елементите на вашия масив от координати не са низове. Тъй като този документ не е валиден за 2dsphere индекс:
"_id" : ObjectId("530cb07c009d8c323b477957"),
"time_from" : ISODate("2014-02-25T15:02:20.714Z"),
"checkin" : [
{
"user_id" : 1,
"loc" : {
"type" : "Point",
"coordinates" : [
"73.43",
"42.22"
]
}
}
]
Моля, обърнете внимание на кавичките за елементите на координатите, което ги прави низове.
ОТГОВОР НА КОМЕНТАРА: Mongo позволява само един геопространствен индекс на колекция. Така че не е нужно да указвате целия път на полето за вашата runCommand. Името на колекцията е достатъчно. Това трябва да работи за вас, ако името на колекцията е checkin_20140222
db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})
Надявам се да помогне!