MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB $ दौर बनाम $ ट्रंक:क्या अंतर है?

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 सबसे छोटा लौटाता है निर्दिष्ट संख्या से अधिक या उसके बराबर पूर्णांक।

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Angular, NodeJS, Express, और MongoDB का उपयोग करके एक ऑनलाइन फ़ूड स्टोर वेबसाइट बनाएं

  2. Draft.js - डेटाबेस से डेटा प्राप्त करने में असमर्थ। क्रॉस-ओरिजिनल एरर

  3. मुझे मोंगोडीबी की वस्तु को केवल फ़िल्टर किए गए सरणी आइटम के साथ पुनर्प्राप्त करने की आवश्यकता है

  4. मोंगोडब स्थानीय सर्वर शुरू करने में असमर्थ

  5. MongoDB - सभी वस्तुओं को लूप किए बिना जावा में संग्रह की प्रतिलिपि बनाएँ