आपके द्वारा प्रदान किया गया दस्तावेज़ मुझे अच्छा लगता है, मैंने आपके दस्तावेज़ के संक्षिप्त संस्करण के साथ एक साधारण परीक्षण भी किया और यह मेरे लिए काम करता है।
"_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"
]
}
}
]
कृपया निर्देशांक तत्वों के उद्धरण चिह्नों पर ध्यान दें जो उन्हें तार बनाते हैं।
टिप्पणी का उत्तर दें: मोंगो प्रति संग्रह केवल एक भू-स्थानिक सूचकांक की अनुमति देता है। तो आपको अपने रन कमांड के लिए संपूर्ण फ़ील्ड पथ निर्दिष्ट करने की आवश्यकता नहीं है। संग्रह का नाम ही काफी है। यदि संग्रह का नाम checkin_20140222
. है तो यह आपके लिए काम करेगा
db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})
आशा है कि यह मदद करेगा!