Det dokument, du leverede, ser godt ud for mig, jeg har også lavet en simpel test med en kort version af dit dokument, og det virker for mig.
"_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" } );
Så jeg foreslår, at du tjekker andre dokumenter i samlingen, nogle af dem kan være forkert udformet til indekset. Sørg også for, at dine koordinatmatrixelementer ikke er strenge. Fordi dette dokument ikke er gyldigt for 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"
]
}
}
]
Bemærk venligst anførselstegnene for koordinatelementerne, hvilket gør dem til strenge.
SVAR PÅ KOMMENTAREN: Mongo tillader kun ét geospatialt indeks pr. samling. Så du behøver ikke at angive hele feltstien for din runCommand. Samlingens navn er nok. Dette burde fungere for dig, hvis samlingens navn er checkin_20140222
db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})
Håber det hjælper!