Dokumen yang Anda berikan terlihat bagus bagi saya, saya juga melakukan pengujian sederhana dengan versi singkat dokumen Anda dan berhasil untuk saya.
"_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" } );
Jadi saya sarankan untuk memeriksa dokumen lain dalam koleksi, beberapa di antaranya mungkin salah format untuk indeks. Pastikan juga bahwa elemen array koordinat Anda bukan string. Karena dokumen ini tidak valid untuk indeks 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"
]
}
}
]
Harap perhatikan tanda kutip untuk elemen koordinat yang membuatnya menjadi string.
JAWAB ATAS KOMENTAR: Mongo hanya mengizinkan satu indeks geospasial per koleksi. Jadi, Anda tidak perlu menentukan seluruh jalur bidang untuk runCommand Anda. Nama koleksi sudah cukup. Ini akan bekerja untuk Anda jika nama koleksi adalah checkin_20140222
db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})
Semoga membantu!