कीवर्ड sphere
. है $near
के बीच अंतर करने के लिए और $nearSphere
.
जैसा कि आप जानते हैं, $nearSphere
गोलाकार ज्यामिति का उपयोग करके दूरी की गणना करने के लिए कहा गया है। यह अर्थ मानचित्र प्रक्षेपण
से संबंधित है (विरूपण
) जहां MongoDB 2d indexes
कार्टेशियन
पर आधारित है और MongoDB 2dsphere indexes
Geodesic
पर आधारित है .
पर्याप्त सिद्धांत, आइए कुछ उदाहरणों का उपयोग करें। मान लें कि हमारे पास नीचे दो दस्तावेज़ हैं:
db.map.insert({ "_id": "Westfield London", "location": [ -0.22157, 51.507176 ] });
db.map.insert({ "_id": "Green Lanes Shopping Centre", "location": [ -0.098092, 51.576198 ] });
दोनों ऑपरेटरों के लिए मैनुअल निर्दिष्ट करता है कि हम इसका उपयोग कर सकते हैं:
2dsphere
GeoJSON के रूप में परिभाषित स्थान डेटा के लिए अनुक्रमणिका अंक2d
विरासत निर्देशांक जोड़े
इंडेक्स:2dsphere , क्वेरी:GeoJSON
db.map.createIndex({"location": "2dsphere"});
db.map.find({"location":{"$nearSphere":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ] }}}});
db.map.find({"location":{"$near":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ]}}}});
इस मामले में, दोनों प्रश्न एक ही परिणाम लौटाएंगे, क्योंकि अनुक्रमणिका 2dsphere
. में संग्रहीत है .
परिणाम:
[ /* $nearSphere */
{"_id" : "Westfield London"},
{"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
{"_id" : "Westfield London"},
{"_id" : "Green Lanes Shopping Centre"}
]
इंडेक्स:2d , क्वेरी:लीगेसी कोऑर्डिनेट्स
db.map.createIndex({"location": "2d"});
db.map.find({"location":{"$nearSphere":[ -0.127748, 51.507333 ]}});
db.map.find({"location":{"$near":[ -0.127748, 51.507333 ]}});
यह वह जगह है जहां अंतर होता है, $nearSphere
. के लिए परिणाम सूचकांक के बावजूद गोलाकार रूप से गणना की जाती है, जबकि $near
फ्लैट प्रक्षेपण में गणना की जाती है।
परिणाम:
[ /* $nearSphere */
{"_id" : "Westfield London"},
{"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
{"_id" : "Green Lanes Shopping Centre"},
{"_id" : "Westfield London"}
]
देखें जिस्ट:JS टेस्ट स्क्रिप्ट उपरोक्त उदाहरण के। MongoDB v3.4.4 का उपयोग करके इसका परीक्षण किया गया।
भू-स्थानिक अनुक्रमणिका और क्वेरी भी देखें .