MongoDB में, $atan2
एग्रीगेशन पाइपलाइन ऑपरेटर एक मान के आर्कटेंगेंट (उलटा स्पर्शरेखा) को दूसरे से विभाजित करके लौटाता है।
आप एक सरणी में दो मान प्रदान करते हैं। $atan2
. को प्रदान किए गए दो मानों में से प्रत्येक कोई भी मान्य व्यंजक हो सकता है जो किसी संख्या का समाधान करता हो।
वापसी मूल्य रेडियन में है।
$atan2
ऑपरेटर को MongoDB 4.2 में पेश किया गया था।
उदाहरण
मान लीजिए हमारे पास data
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" :1, "a" :2, "b" :3 }
हम $atan2
. का उपयोग कर सकते हैं ऑपरेटर a
. की चाप स्पर्शरेखा लौटाने के लिए b
. से विभाजित फ़ील्ड फ़ील्ड:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a", "$b" ] }
}
}
]
)
परिणाम:
{ "arctangent" :0.5880026035475675 }
डिग्री में बदलें
जैसा कि बताया गया है, $atan2
रेडियन में अपना परिणाम देता है। आप $radiansToDegrees
. का उपयोग कर सकते हैं यदि आप परिणाम डिग्री में चाहते हैं तो ऑपरेटर।
उदाहरण:
db.data.aggregate(
[
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
radians: { $atan2: [ "$a", "$b" ] },
degrees: { $radiansToDegrees: { $atan2: [ "$a", "$b" ] } }
}
}
]
)
परिणाम:
{ "रेडियन" :0.5880026035475675, "डिग्री" :33.690067525979785 }
इस उदाहरण में, पहला फ़ील्ड परिणाम को रेडियन में प्रस्तुत करता है, और दूसरा फ़ील्ड इसे डिग्री में प्रस्तुत करता है।
128-बिट दशमलव मान
डिफ़ॉल्ट रूप से, $atan2
ऑपरेटर मानों को double
. के रूप में लौटाता है , लेकिन यह 128-बिट दशमलव के रूप में भी मान लौटा सकता है, जब तक कि व्यंजक 128-बिट दशमलव मान पर हल हो जाता है।
यह तब भी होता है जब व्यंजकों में से केवल एक ही 128-बिट दशमलव होता है।
मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:
{ "_id" : 2, "a" : NumberDecimal("1.1301023541559787031443874490659"), "b" : NumberDecimal("2.1301023541559787031443874490659") }
{ "_id" : 3, "a" : 2, "b" : NumberDecimal("2.1301023541559787031443874490659") }
{ "_id" : 4, "a" : NumberDecimal("2.1301023541559787031443874490659"), "b" : 2 }
चलिए $atan2
चलाते हैं उन दस्तावेजों के खिलाफ ऑपरेटर:
db.data.aggregate(
[
{ $match: { _id: { $in: [ 2, 3, 4 ] } } },
{ $project: {
_id: 0,
arctangent: { $atan2: [ "$a", "$b" ] }
}
}
]
)
परिणाम:
{ "arctangent" :NumberDecimal("0.4877792766738730791507215461936449") }{ "arctangent" :NumberDecimal("0.7539075768401526572881006364456838") }{ "arctangent" :NumberDecimal("0.81688431055474396")सभी मामलों में, आउटपुट 128-बिट दशमलव है।
शून्य मान
शून्य मान
null
लौटाते हैं$atan2
. का उपयोग करते समय ऑपरेटर। यह सच है, भले ही केवल एक व्यंजकnull
. हो ।मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:
{ "_id" :5, "a" :null, "b" :2 }{ "_id" :6, "a" :2, "b" :null }{ "_id" :7, "a " :2, "null" :null }चलिए
$atan2
चलाते हैं उन दस्तावेजों के खिलाफ ऑपरेटर:db.data.aggregate( [ { $match: { _id: { $in: [ 5, 6, 7 ] } } }, { $project: { _id: 0, arctangent: { $atan2: [ "$a", "$b" ] } } } ] )
परिणाम:
{ "arctangent" :null }{ "arctangent" :null }{ "arctangent" :null }हम देख सकते हैं कि परिणाम
null
है सभी मामलों में।NaN मान
अगर तर्क का समाधान
NaN
. हो जाता है ,$atan2
रिटर्नNaN
।उदाहरण:
db.data.aggregate( [ { $match: { _id: { $in: [ 2, 3, 4 ] } } }, { $project: { _id: 0, arctangent: { $atan2: [ "$a" * 1, "$b" ] } } } ] )
परिणाम:
{ "arctangent" :NumberDecimal("NaN") }{ "arctangent" :NumberDecimal("NaN") }{ "arctangent" :NaN }आइए इसे थोड़ा बदल दें, ताकि हम
b
field फ़ील्ड को गुणा करें फ़ील्ड के बजायa
।db.data.aggregate( [ { $match: { _id: { $in: [ 2, 3, 4 ] } } }, { $project: { _id: 0, arctangent: { $atan2: [ "$a", "$b" * 1 ] } } } ] )
परिणाम:
{ "arctangent" :NumberDecimal("NaN") }{ "arctangent" :NaN }{ "arctangent" :NumberDecimal("NaN") }और अब दोनों क्षेत्रों को गुणा करते हैं:
db.data.aggregate( [ { $match: { _id: { $in: [ 2, 3, 4 ] } } }, { $project: { _id: 0, arctangent: { $atan2: [ "$a" * 1, "$b" * 1 ] } } } ] )
परिणाम:
{ "arctangent" :NaN }{ "arctangent" :NaN }{ "arctangent" :NaN }गैर-मौजूद फ़ील्ड
अगर
$atan2
ऑपरेटर को उस फ़ील्ड के विरुद्ध लागू किया जाता है जो मौजूद नहीं है,null
लौटा दिया गया है।उदाहरण:
db.data.aggregate( [ { $match: { _id: 1 } }, { $project: { _id: 0, result: { $atan2: [ "$a", "$name" ] } } } ] )
परिणाम:
{ "result" :null }