Il documento che hai fornito mi sembra buono, ho anche fatto un semplice test con una versione breve del tuo documento e funziona per me.
"_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" } );
Quindi suggerisco di controllare altri documenti nella raccolta, alcuni potrebbero non essere corretti per l'indice. Assicurati inoltre che gli elementi dell'array di coordinate non siano stringhe. Perché questo documento non è valido per 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"
]
}
}
]
Si prega di notare le virgolette per gli elementi delle coordinate che li rendono stringhe.
RISPOSTA AL COMMENTO: Mongo consente un solo indice geospaziale per raccolta. Quindi non devi specificare l'intero percorso del campo per il tuo runCommand. Il nome della raccolta è sufficiente. Questo dovrebbe funzionare per te se il nome della raccolta è checkin_20140222
db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})
Spero che ti aiuti!