इस अध्याय में MongoDB के जियोस्पेशल क्वेरी का परिचय दिया गया है, जो ज्यामितीय संबंध और समावेश क्वेरी का समर्थन करता है।
आवेदन के परिदृश्य:
- मानचित्र पर एक वृत्त बनाएं और वृत्त के भीतर डेटा क्वेरी करें।
पूर्वापेक्षित ट्यूटोरियल
MongoDB के लिए जियोस्पेशल डेटा स्टोरेज फॉर्मेट
दूरी के आधार पर डेटा क्वेरी करने के पूर्वाश्रित बिंदु कुछ इस प्रकार होते हैं:
- प्रत्येक दस्तावेज़ डेटा में ज्यामितीय डेटा संग्रहित करने के लिए एक फ़ील्ड होता है, उदाहरण के लिए: स्थान फ़ील्ड दुकान के संयोजन को संग्रहित करता है।
- एक 2dsphere या 2d स्थानिक सूचक बनाएँ।
$geoWithin ऑपरेटर
यह आमतौर पर एक निर्दिष्ट ज्यामितीय सीमा के भीतर आवर्ती नियंत्रित बिंदुओं को क्वेरी करने के लिए उपयोग किया जाता है, उदाहरण के लिए: मानचित्र पर घरों की खोज करते समय, मानचित्र पर एक क्षेत्र बनाकर उस क्षेत्र के भीतर के घरों को क्वेरी करें।
सिंटेक्स प्रारूप:
{
<स्थान फ़ील्ड>: { // क्वेरी फ़ील्ड
$geoWithin: {
$geometry: {
type: , // केवल बहुभुज या बहुलब्धि का समर्थन करता है।
coordinates: [ <निर्दिष्टांक> ] // ज्यामितीय निर्देशांक बिंदुओं का संग्रह
}
}
}
}
उदाहरण:
db.places.find(
{
loc: { // स्थान फ़ील्ड में विस्थापन डेटा संग्रहित करता है
$geoWithin: {
$geometry: {
type: "Polygon" ,
coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] // इस ज्यामितीय क्षेत्र में डेटा खोजें
}
}
}
}
)
स्थानों संग्रह में निर्दिष्ट ज्यामितीय क्षेत्र के भीतर दस्तावेज़ डेटा क्वेरी करें।
$geoIntersects ऑपरेटर
$geoWithin से अंतर इस बात का है कि $geoIntersects का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या दो ज्यामितियां
के बीच एक संचार है।
स्वरूप:
{
<स्थान फ़ील्ड>: { // ज्यामितीय निर्दिश बिंदु संग्रहित करने वाला फ़ील्ड
$geoIntersects: {
$geometry: {
type: "<geojson object type>" , // ज्यामितीय प्रकार
coordinates: [ <निर्दिष्टांक> ] // ज्यामितीय निर्देशांक बिंदु संग्रह, इस ज्यामिति के संचार संबंधी डेटा क्वेरी करें
}
}
}
}
उदाहरण:
db.places.find(
{
loc: { // स्थान फ़ील्ड क्षेत्र डेटा संग्रहित करता है, जो एक ज्यामितीय आकृति है
$geoIntersects: {
$geometry: {
type: "Polygon" ,
coordinates: [
[ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] // इस ज्यामितीय आकार से संबंधित डेटा क्वेरी करें
]
}
}
}
}
)