MongoDB के एकत्रीकरण पाइपलाइन ढांचे में एक $round
. शामिल है ऑपरेटर और एक $trunc
ऑपरेटर। ये ऑपरेटर समान, लेकिन अलग-अलग कार्य करते हैं।
परिभाषाएं
सबसे पहले, आइए प्रत्येक ऑपरेटर की परिभाषाओं को देखें:
- द
$round
ऑपरेटर राउंड एक पूर्णांक या एक निर्दिष्ट दशमलव स्थान के लिए एक संख्या। - द
$truncate
ऑपरेटर छोटा करता है एक पूर्णांक या एक निर्दिष्ट दशमलव स्थान के लिए एक संख्या।
मूल रूप से, अंतर दौर . शब्दों में है बनाम काटना ।
कुछ मामलों में, दोनों ऑपरेटर एक ही परिणाम लौटाएंगे। अन्य मामलों में, उनके परिणाम भिन्न होंगे। ऐसा इसलिए है क्योंकि $round
ऑपरेटर मूल्य के आधार पर संख्या को गोल कर सकता है। $truncate
ऑपरेटर संख्या को गोल नहीं करता है। इसके बजाय, यह बस इसे छोटा कर देता है। दूसरे शब्दों में, यह केवल निर्दिष्ट संख्या में कटौती करता है, जबकि शेष अंकों को छोड़ देता है।
उदाहरण
मान लीजिए हमारे पास test
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "data" : 8.99 } { "_id" : 2, "data" : 8.45 } { "_id" : 3, "data" : 8.451 } { "_id" : 4, "data" : -8.99 } { "_id" : 5, "data" : -8.45 } { "_id" : 6, "data" : -8.451 } { "_id" : 7, "data" : 8 } { "_id" : 8, "data" : 0 } { "_id" : 9, "data" : 0.5 } { "_id" : 10, "data" : 8111.32 } { "_id" : 11, "data" : 8514.321 } { "_id" : 12, "data" : 8999.454 }
यहां बताया गया है कि जब हम $round
लागू करते हैं तो क्या होता है और $truncate
उन दस्तावेज़ों के लिए:
db.test.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data" ] },
truncated: { $trunc: [ "$data" ] }
}
}
]
)
परिणाम:
{ "data" : 0, "rounded" : 0, "truncated" : 0 } { "data" : 8, "rounded" : 8, "truncated" : 8 } { "data" : 0.5, "rounded" : 0, "truncated" : 0 } { "data" : 0.9, "rounded" : 1, "truncated" : 0 } { "data" : 8.99, "rounded" : 9, "truncated" : 8 } { "data" : 8.45, "rounded" : 8, "truncated" : 8 } { "data" : 8.451, "rounded" : 8, "truncated" : 8 } { "data" : -8.99, "rounded" : -9, "truncated" : -8 } { "data" : -8.45, "rounded" : -8, "truncated" : -8 } { "data" : -8.451, "rounded" : -8, "truncated" : -8 }
हम देख सकते हैं कि कुछ मामलों में परिणाम समान होता है। दूसरों में, यह अलग है। उदाहरण के लिए, जब इनपुट मान 0.9
हो , $round
ऑपरेटर संख्या को 1
. तक पूर्णांकित करता है . $truncate
दूसरी ओर ऑपरेटर बस .9
. को हटा देता है भाग, जो 0
. का परिणाम देता है ।
नकारात्मक भिन्नात्मक स्थान
दोनों ऑपरेटर वैकल्पिक दूसरा तर्क स्वीकार करते हैं। मौजूद होने पर, यह तर्क संख्या को गोल/छोटा करने के लिए दशमलव स्थानों की संख्या निर्दिष्ट करता है।
यह दूसरा तर्क प्रदान करने से दो ऑपरेटरों के बीच अंतर को और अधिक उजागर किया जा सकता है।
उदाहरण:
db.test.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data", 1 ] },
truncated: { $trunc: [ "$data", 1 ] }
}
}
]
)
परिणाम:
{ "data" : 0, "rounded" : 0, "truncated" : 0 } { "data" : 8, "rounded" : 8, "truncated" : 8 } { "data" : 0.5, "rounded" : 0.5, "truncated" : 0.5 } { "data" : 0.9, "rounded" : 0.9, "truncated" : 0.9 } { "data" : 8.99, "rounded" : 9, "truncated" : 8.9 } { "data" : 8.45, "rounded" : 8.4, "truncated" : 8.4 } { "data" : 8.451, "rounded" : 8.5, "truncated" : 8.4 } { "data" : -8.99, "rounded" : -9, "truncated" : -8.9 } { "data" : -8.45, "rounded" : -8.4, "truncated" : -8.4 } { "data" : -8.451, "rounded" : -8.5, "truncated" : -8.4 }
फिर से हम देख सकते हैं कि कुछ परिणाम समान हैं जबकि अन्य नहीं हैं।
नकारात्मक भिन्नात्मक स्थान
दोनों ऑपरेटर दूसरे तर्क के लिए ऋणात्मक मान स्वीकार करते हैं।
उदाहरण:
db.test.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
rounded: { $round: [ "$data", -1 ] },
truncated: { $trunc: [ "$data", -1 ] }
}
}
]
)
परिणाम:
{ "data" : 0, "rounded" : 0, "truncated" : 0 } { "data" : 8, "rounded" : 10, "truncated" : 0 } { "data" : 0.5, "rounded" : 0, "truncated" : 0 } { "data" : 0.9, "rounded" : 0, "truncated" : 0 } { "data" : 8.99, "rounded" : 10, "truncated" : 0 } { "data" : 8.45, "rounded" : 10, "truncated" : 0 } { "data" : 8.451, "rounded" : 10, "truncated" : 0 } { "data" : -8.99, "rounded" : -10, "truncated" : 0 } { "data" : -8.45, "rounded" : -10, "truncated" : 0 } { "data" : -8.451, "rounded" : -10, "truncated" : 0 }
इस बार दो ऑपरेटरों द्वारा उत्पादित परिणामों के बीच एक बड़ा अंतर है। $trunc
ऑपरेटर उत्पादित 0
प्रत्येक दस्तावेज़ के लिए, जबकि $round
ऑपरेटर ने विभिन्न मान लौटाए, जिनमें से अधिकांश को ऊपर या नीचे गोल किया गया था।
$फर्श और $ceil
इस तरह के संचालन करते समय जागरूक होने वाले दो और ऑपरेटरों $floor
. हैं और $ceil
. ये ऑपरेटर एक समान तरीके से काम करते हैं, लेकिन थोड़ा अलग।
$floor
सबसे बड़ा लौटाता है निर्दिष्ट संख्या से कम या उसके बराबर पूर्णांक$ceil
सबसे छोटा लौटाता है निर्दिष्ट संख्या से अधिक या उसके बराबर पूर्णांक।