జియోస్పేషియల్ ఫీచర్ల కోసం సేకరణలో పత్రాలను జోడిస్తోంది
MongoDB జియోస్పేషియల్ ఫీచర్ యొక్క కార్యాచరణను ప్రదర్శించడానికి, మాకు నిర్దిష్ట సేకరణ కోసం పత్రాలు అవసరం. కింది వాటిలో చూపిన విధంగా మేము 'ఏరియా' సేకరణలో కొన్ని పత్రాలను చొప్పిస్తాము:
db.area.insertMany( [{
పేరు: 'చిల్డ్రన్ పార్క్' ,
స్థానం: {రకం: 'పాయింట్' , అక్షాంశాలు: [- 60.97 , 30.77 ] },
వర్గం: 'తోట'
},
{
పేరు: 'విద్యార్థి ప్రాంతం' ,
స్థానం: {రకం: 'పాయింట్' , అక్షాంశాలు: [- 60.9928 , 30.7193 ] },
వర్గం: 'తోట'
},
{
పేరు: 'ఫుట్బాల్ గ్రౌండ్' ,
స్థానం: {రకం: 'పాయింట్' , అక్షాంశాలు: [- 60.9375 , 30.8303 ] },
వర్గం: 'స్టేడియం'
}
])
కోఆర్డినేట్ల వంటి స్థాన డేటాను కలిగి ఉన్న పత్రాలు మా వద్ద ఉన్నాయి. అదనంగా, మేము జియోస్పేషియల్ ప్రశ్నల పనితీరును ఆప్టిమైజ్ చేయడానికి ఫీల్డ్లో జియోస్పేషియల్ ఇండెక్స్ను సృష్టిస్తాము.
ఉదాహరణ 1: $geoIntersects క్వెరీ ఆపరేటర్ని ఉపయోగించడం
ముందుగా, మేము అందించిన వస్తువుతో కలుస్తున్న జియోస్పేషియల్ ఫీచర్ యొక్క $geoIntersects ఆపరేటర్ని కలిగి ఉన్నాము. $geoIntersects ఆపరేటర్ యొక్క క్రింది అమలును పరిగణించండి:
db.area.find({ location: { $geoIntersects: { $geometry: { type: 'పాయింట్' ,
అక్షాంశాలు: [- 60.97 , 30.77 ] } } })
ఉదాహరణలో, మేము 'కనుగొను' ఆపరేషన్తో పాటుగా 'ప్రాంతం' సేకరణను పిలుస్తాము. ఫైండ్() పద్ధతికి, మేము జియోస్పేషియల్ ఫీచర్ యొక్క $geoIntersects క్వెరీ ఆపరేటర్కి “స్థానం” ఫీల్డ్ సెట్లను పాస్ చేస్తాము. జ్యామితి ఫీల్డ్లో నిల్వ చేయబడిన జ్యామితితో పేర్కొన్న పాయింట్ కలుస్తుందో లేదో తనిఖీ చేయడానికి ఇది ఉపయోగించబడుతుంది.
అప్పుడు, $geoIntesects ఆపరేటర్ $జ్యామెట్రీ ఆపరేటర్ను తీసుకుంటుంది, ఇక్కడ టైప్ ఫీల్డ్ 'పాయింట్' విలువతో సెట్ చేయబడుతుంది మరియు కోఆర్డినేట్స్ ఫీల్డ్ 'కోఆర్డినేట్స్' విలువలతో ఇవ్వబడుతుంది. ఇక్కడ, భౌగోళిక పోలిక కోసం $జ్యామితి నిర్వచించబడింది.
కింది అవుట్పుట్లో ఆశించిన పత్రం తిరిగి పొందబడింది మరియు జ్యామితి ఫీల్డ్లో పేర్కొన్న పాయింట్తో కలుస్తున్న రేఖాగణిత వస్తువు ఉంటుంది:
ఉదాహరణ 2: $నియర్ క్వెరీ ఆపరేటర్ని ఉపయోగించడం
$నియర్ ఆపరేటర్ అనేది భౌగోళికంగా ఇచ్చిన ప్రదేశానికి సమీపంలో ఉన్న పత్రాలను గుర్తించడానికి జియోస్పేషియల్ ప్రశ్నలను చేయడానికి ఉపయోగించే జియోస్పేషియల్ ఫీచర్ కూడా. ఇది పేర్కొన్న స్థానానికి సామీప్యత ప్రకారం అమర్చబడిన పత్రాలను తిరిగి పొందుతుంది. ఇక్కడ, మేము $near ఆపరేటర్ యొక్క అమలును అందిస్తాము:
db.area.find({
స్థానం:
{$సమీపంలో:
{
$జ్యామితి: {రకం: 'పాయింట్' , అక్షాంశాలు: [ - 60.9667 , 30.78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)
ఉదాహరణలో, 'కనుగొను' ఆపరేషన్ లోపల 'ప్రాంతం' సేకరణ యొక్క 'స్థానం' ఫీల్డ్ను మేము నిర్వచించాము. అప్పుడు, మేము జియోస్పేషియల్ ఫీచర్ యొక్క $సమీప ప్రశ్న ఆపరేటర్ని ఆ “స్థానం” ఫీల్డ్కి సెట్ చేసాము. $నియర్ ఆపరేటర్ ఇచ్చిన కోఆర్డినేట్ పాయింట్తో సమీప పాయింట్ కోసం శోధిస్తుంది. తర్వాత, మేము $minDistance మరియు $maxDistance పారామితులను $నియర్ ఆపరేటర్లో ఉపయోగిస్తాము, ఇవి నిర్దిష్ట విలువలతో అందించబడిన పాయింట్ నుండి పేర్కొన్న దూర పరిధిలో డాక్యుమెంట్లను తిరిగి పొందడానికి.
జియోస్పేషియల్ “ఏరియా” సేకరణలో పేర్కొన్న స్థానాలు లేదా ఆసక్తి ఉన్న పాయింట్లకు సమీపంలో ఉన్న అవుట్పుట్లో పత్రం తిరిగి పొందబడుతుంది:
ఉదాహరణ 3: $nearsphere క్వెరీ ఆపరేటర్ని ఉపయోగించడం
ప్రత్యామ్నాయంగా, మనకు $నియర్స్పియర్ ఆపరేటర్ ఉంది, ఇది $నియర్ ఆపరేటర్ని పోలి ఉంటుంది, అయితే $నియర్స్పియర్ దూరాలను లెక్కించేటప్పుడు భూమి యొక్క గోళాకార ఆకారాన్ని పరిగణనలోకి తీసుకుంటుంది.
db.area.find({
స్థానం: {
$nearSphere: {
$జ్యామితి: {
రకం: 'పాయింట్' ,
అక్షాంశాలు : [- 60.9667 , 30.78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)
ఉదాహరణలో, మేము జియోస్పేషియల్ క్వెరీ యొక్క $nearsphere ఆపరేటర్ని ఉపయోగిస్తాము. ఇక్కడ $nearspehere ఆపరేటర్ పత్రం కోసం శోధిస్తుంది, దీని సమీప పాయింట్లు ప్రశ్నలో పేర్కొన్న పాయింట్లకు దగ్గరగా ఉంటాయి మరియు పాయింట్లు కోఆర్డినేట్ ఫీల్డ్ అర్రేకి సెట్ చేయబడతాయి.
ఆ తర్వాత, మేము $minDistance మరియు $maxDistance పారామితులను ఏర్పాటు చేయడం ద్వారా ఫలితాలను మెరుగుపరుస్తాము. $minDistance పరామితి తిరిగి వచ్చిన పత్రాలు పేర్కొన్న పాయింట్ నుండి కనీసం 1000 మీటర్ల దూరంలో ఉన్నాయని నిర్ధారిస్తుంది, అయితే $maxDistance పరామితి ఫలితాలను 5000 మీటర్ల కంటే ఎక్కువ దూరంలో లేని స్థానాలకు పరిమితం చేస్తుంది.
పత్రం అవుట్పుట్లో ఇవ్వబడిన కోఆర్డినేట్లతో పాయింట్ నుండి పేర్కొన్న మీటర్ లోపల స్థానంతో ప్రదర్శించబడుతుంది:
ఉదాహరణ 4: $geoWithin క్వెరీ ఆపరేటర్ని ఉపయోగించడం
తర్వాత, మేము మొంగోడిబిలో $geoWithin ఆపరేటర్ని కలిగి ఉన్నాము, ఇది పూర్తిగా సర్కిల్ వంటి నిర్దిష్ట ఆకృతిలో ఉన్న పత్రాలను కనుగొనడానికి జియోస్పేషియల్ ప్రశ్నల కోసం ఉపయోగించబడుతుంది. $geoWithin ప్రశ్న యొక్క క్రింది ప్రదర్శనను చూద్దాం:
db.area.find({లొకేషన్:{ $geoWithin:
{ $centerSphere: [ [ - 60.93414657 , 30.82302903 ], 3 / 3963.2 ] } })
ఉదాహరణలో, మేము 2D గోళంలో నిర్దిష్ట వృత్తాకార ప్రాంతంలో 'ఏరియా' సేకరణ యొక్క పత్రాలను కనుగొనడానికి $geoWithin ఆపరేటర్ని ఉపయోగిస్తాము. దీని కోసం, మేము $geoWithin ఆపరేటర్లోని $centerSphere ఆపరేటర్ని పేర్కొంటాము, ఇది రెండు ఆర్గ్యుమెంట్లను సెంట్రిక్ పాయింట్గా తీసుకుంటుంది, ఇది ఇక్కడ అక్షాంశ బిందువును మరియు మైళ్లలో దూర విలువను సూచించే సర్కిల్ యొక్క వ్యాసార్థాన్ని సూచిస్తుంది.
ఫలిత పత్రం క్రింది వాటిలో తిరిగి పొందబడింది, ఇది ఇచ్చిన కేంద్ర బిందువు మరియు సుమారు 3 మైళ్ల వ్యాసార్థం ద్వారా నిర్వచించబడిన వృత్తం పరిధిలోకి వచ్చే జియోస్పేషియల్ పాయింట్ను సూచిస్తుంది:
ఉదాహరణ 5: $geoNear క్వెరీ ఆపరేటర్ని ఉపయోగించడం
అంతేకాకుండా, $geoNear ఆపరేటర్ కూడా ఒక జియోస్పేషియల్ ఆపరేటర్, ఇది అగ్రిగేషన్ పైప్లైన్ కోసం ఉపయోగించబడుతుంది. ఇది భౌగోళిక క్వెరీని నిర్వహిస్తుంది మరియు నిర్దిష్ట పాయింట్కి సామీప్యత ద్వారా క్రమబద్ధీకరించబడిన పత్రాలను తిరిగి అందిస్తుంది. ఇక్కడ, మేము అగ్రిగేషన్ పైప్లైన్ లోపల పిలువబడే $geoNear ఆపరేటర్ని అందించాము.
db.area.aggregate([{
$geoNear: {
సమీపంలో: { రకం: 'పాయింట్' , అక్షాంశాలు: [- 60.99279 , 30.719296 ] },
దూర క్షేత్రం: 'dist.calculated' ,
గరిష్ట దూరం: 2 ,
ప్రశ్న: { వర్గం: 'తోట' },
లాక్స్ ఉన్నాయి: 'dist.location' ,
గోళాకారం: నిజం
}
}
])
ఉదాహరణలో, మేము మొంగోడిబి యొక్క మొత్తం పద్ధతిని పిలుస్తాము మరియు దానిలోని $జియోనియర్ ఆపరేటర్ని నిర్వచించాము. $geoNear ఆపరేటర్ ప్రశ్న ప్రవర్తనను పేర్కొనడానికి అనేక పారామితులతో సెట్ చేయబడింది. మొదట, మేము 'సమీపంలో' పరామితిని సెట్ చేసాము, ఇది 'కోఆర్డినేట్స్' విలువలను శోధించడానికి రిఫరెన్స్ పాయింట్గా అందిస్తుంది.
ఆపై, అందించిన ఫీల్డ్ను ఫలిత క్షేత్రంగా పేర్కొనడానికి మేము “distanceField” పరామితిని ఉపయోగిస్తాము. ఈ సెట్ ఫలితం ఫీల్డ్ ప్రతి డాక్యుమెంట్ మరియు రిఫరెన్స్ పాయింట్ మధ్య దూరాన్ని నిల్వ చేస్తుంది. తరువాత, మేము 'maxDistance' పరామితిని '2″ విలువతో నిర్వచిస్తాము, ఇది మీటర్లలో గరిష్ట దూరాన్ని సూచిస్తుంది.
ఆ తర్వాత, 'క్వరీ' ఫీల్డ్ ద్వారా డాక్యుమెంట్లను ఫిల్టర్ చేసే 'క్వరీ' పారామీటర్ ఉంది మరియు 'కేటగిరీ' 'పార్క్స్' ఉన్న పత్రాలను మాత్రమే పరిగణిస్తుంది. మేము స్థాన సమాచారాన్ని కలిగి ఉండటానికి 'includeLocs' పరామితిని కాల్ చేస్తాము. 2D గోళాకార కోఆర్డినేట్ సిస్టమ్ని ఉపయోగించి దూరాలను లెక్కించే 'నిజమైన' విలువతో మేము చివరకు 'గోళాకార' పరామితిని నిర్దేశిస్తాము.
అగ్రిగేషన్ పైప్లైన్ అవుట్పుట్లోని పత్రాన్ని సూచిస్తుంది, ఇది తదనుగుణంగా పారామీటర్కు వ్యతిరేకంగా సమాచారాన్ని ప్రదర్శిస్తుంది. కింది “dist.calculated” ఫీల్డ్ ప్రతి పత్రం యొక్క రిఫరెన్స్ పాయింట్ నుండి దూరాన్ని ప్రదర్శిస్తుంది:
ముగింపు
లొకేషన్ ఆధారిత సమాచారాన్ని సమర్ధవంతంగా నిర్వహించడానికి మరియు ప్రశ్నించడానికి MongoDB యొక్క భౌగోళిక సామర్థ్యాలు మాకు సహాయపడతాయని మేము తెలుసుకున్నాము. మేము ఉదాహరణ ప్రోగ్రామ్తో వివిధ ఆపరేటర్లను ఉపయోగించి జియోస్పేషియల్ ఫీచర్ యొక్క అమలును నేర్చుకున్నాము. విస్తృత శ్రేణి అనువర్తనాలకు కూడా ప్రయోజనకరమైన అనేక కార్యాచరణలు మరియు పద్ధతులు మా వద్ద ఉన్నాయి.