MongoDB निम्नलिखित भू-स्थानिक सूचकांक प्रकार प्रदान करता है जो भू-स्थानिक प्रश्नों का समर्थन करते हैं।
- 2d अनुक्रमणिका उन प्रश्नों का समर्थन करती है जो द्वि-आयामी समतल पर ज्यामिति की गणना करते हैं।
2dsphere
अनुक्रमणिका उन प्रश्नों का समर्थन करती है जो पृथ्वी जैसे गोले पर ज्यामिति की गणना करते हैं।
इस लेख में, मैं एक 2dsphere
बनाता हूं सूचकांक।
उदाहरण संग्रह
मान लीजिए हमारे पास bars
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "name" : "Boardwalk Social", "location" : { "type" : "Point", "coordinates" : [ 145.77675259719823, -16.919297718553366 ] } } { "_id" : 2, "name" : "The Downunder Bar", "location" : { "type" : "Point", "coordinates" : [ 145.77621640842125, -16.92107838010542 ] } } { "_id" : 3, "name" : "Riley", "location" : { "type" : "Point", "coordinates" : [ 145.7739955395154, -16.916028253292883 ] } } { "_id" : 4, "name" : "Salt House", "location" : { "type" : "Point", "coordinates" : [ 145.78148426655065, -16.91823513430776 ] } } { "_id" : 5, "name" : "Rattle n Hum", "location" : { "type" : "Point", "coordinates" : [ 145.77746095331537, -16.920051942529685 ] } }
प्रत्येक दस्तावेज़ में स्थान की जानकारी GeoJSON ऑब्जेक्ट के रूप में संग्रहीत होती है।
GeoJSON ऑब्जेक्ट में type
. नाम की फ़ील्ड होती है जो GeoJSON ऑब्जेक्ट प्रकार और coordinates
. नामक फ़ील्ड निर्दिष्ट करता है जो वस्तु के निर्देशांक निर्दिष्ट करता है।
2dsphere इंडेक्स बनाएं
चलिए अब 2dsphere
बनाते हैं सूचकांक।
db.bars.createIndex( { location : "2dsphere" } )
आउटपुट:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
2dsphere
अनुक्रमणिका अब बना दी गई है।
अब हम getIndexes()
. का उपयोग कर सकते हैं हमारे सूचकांक की जाँच करने की विधि:
db.bars.getIndexes()
परिणाम:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 3 } ]
हम देख सकते हैं कि सूचकांक एक 2dsphere
. के रूप में बनाया गया था 2dsphereIndexVersion
. का उपयोग करके अनुक्रमणिका का 3
, जो मेरी वर्तमान MongoDB स्थापना (4.4) के लिए डिफ़ॉल्ट संस्करण है।
एक कंपाउंड 2dsphere इंडेक्स बनाएं
आप 2dsphere
. शामिल कर सकते हैं मिश्रित अनुक्रमणिका में अनुक्रमणिका कुंजियाँ जो गैर-भू-स्थानिक अनुक्रमणिका कुंजियों के साथ संयुक्त होती हैं।
उदाहरण के लिए, हम अपने location
. को मिला सकते थे name
. के साथ फ़ील्ड यौगिक अनुक्रमणिका बनाने के लिए फ़ील्ड।
आइए इंडेक्स को छोड़ दें और एक कंपाउंड इंडेक्स बनाएं:
db.bars.dropIndex("location_2dsphere")
db.bars.createIndex( { location : "2dsphere", name : 1 } )
आउटपुट:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
और इंडेक्स चेक करें:
db.bars.getIndexes()
परिणाम:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere", "name" : 1 }, "name" : "location_2dsphere_name_1", "2dsphereIndexVersion" : 3 } ]
कंपाउंड 2dsphere
अनुक्रमणिका एकाधिक स्थान और गैर-स्थान फ़ील्ड का संदर्भ दे सकती है। यह यौगिक 2d
. के विपरीत है अनुक्रमणिका, जो केवल एक स्थान फ़ील्ड और एक अन्य फ़ील्ड को संदर्भित करने तक सीमित हैं।
2dsphereIndexVersion को बदलना
आप 2dsphereIndexVersion
. को बदल सकते हैं अनुक्रमणिका बनाते समय इसे वांछित मान वाले फ़ील्ड के रूप में जोड़कर।
उदाहरण:
db.bars.createIndex(
{ location : "2dsphere" },
{ "2dsphereIndexVersion" : 2 }
)
आउटपुट:
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
सूचकांक की जाँच करें:
db.bars.getIndexes()
परिणाम:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "location" : "2dsphere" }, "name" : "location_2dsphere", "2dsphereIndexVersion" : 2 } ]
यह अनुक्रमणिका 2dsphere
. के रूप में बनाई गई है अनुक्रमणिका संस्करण 2.
संस्करण 2 2dsphere
. का डिफ़ॉल्ट संस्करण है MongoDB 2.6 और 3.0 श्रृंखला में बनाए गए अनुक्रमणिका।
संस्करण 3 2dsphere
. का डिफ़ॉल्ट संस्करण है MongoDB 3.2 और बाद में (लेखन के समय) में बनाए गए इंडेक्स।
जब मैंने 2dsphereIndexVersion
. निर्दिष्ट किए बिना अनुक्रमणिका बनाई फ़ील्ड, इसने संस्करण 3 का उपयोग करके अनुक्रमणिका बनाई, क्योंकि यह मेरे MongoDB संस्करण (4.4) के लिए डिफ़ॉल्ट संस्करण है।