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

मोंगोडीबी $दौर

MongoDB में, $round एग्रीगेशन पाइपलाइन ऑपरेटर किसी संख्या को पूरे पूर्णांक या एक निर्दिष्ट दशमलव स्थान तक गोल करता है।

आपके पास यह निर्दिष्ट करने का विकल्प है कि कितने दशमलव स्थानों के लिए संख्या को गोल करना है। ऐसा करने के लिए, दूसरा तर्क पास करें। पहला तर्क गोल करने के लिए संख्या है, और दूसरा (वैकल्पिक) तर्क इसे गोल करने के लिए दशमलव स्थानों की संख्या है।

उदाहरण

मान लीजिए हमारे पास 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 }

हम $round . का उपयोग कर सकते हैं data में मानों को गोल करने के लिए ऑपरेटर फ़ील्ड:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data" ] }
          }
     }
   ]
)

परिणाम:

{ "data" : 8.99, "rounded" : 9 }
{ "data" : 8.45, "rounded" : 8 }
{ "data" : 8.451, "rounded" : 8 }
{ "data" : -8.99, "rounded" : -9 }
{ "data" : -8.45, "rounded" : -8 }
{ "data" : -8.451, "rounded" : -8 }
{ "data" : 8, "rounded" : 8 }
{ "data" : 0, "rounded" : 0 }

दशमलव स्थान निर्दिष्ट करें

हमारे पास यह निर्दिष्ट करने के लिए दूसरे तर्क का उपयोग करने का विकल्प है कि कितने दशमलव स्थानों के लिए संख्या को गोल करना है।

उदाहरण:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data", 1 ] }
          }
     }
   ]
)

परिणाम:

{ "data" : 8.99, "rounded" : 9 }
{ "data" : 8.45, "rounded" : 8.4 }
{ "data" : 8.451, "rounded" : 8.5 }
{ "data" : -8.99, "rounded" : -9 }
{ "data" : -8.45, "rounded" : -8.4 }
{ "data" : -8.451, "rounded" : -8.5 }
{ "data" : 8, "rounded" : 8 }
{ "data" : 0, "rounded" : 0 }

नकारात्मक दशमलव स्थान

दूसरा तर्क कोई भी मान्य व्यंजक हो सकता है जो -20 और 100 के बीच एक पूर्णांक को हल करता है, अनन्य। इसलिए, आप एक ऋणात्मक दशमलव स्थान निर्दिष्ट कर सकते हैं।

जब आप ऐसा करते हैं, तो संख्या दशमलव स्थान के बाईं ओर गोल हो जाती है। यदि ऋणात्मक पूर्णांक का निरपेक्ष मान संख्या से अधिक है, तो परिणाम 0 . है ।

मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:

{ "_id" : 9, "data" : 8111.32 }
{ "_id" : 10, "data" : 8514.321 }
{ "_id" : 11, "data" : 8999.454 }

$round . लागू करते समय विभिन्न नकारात्मक दशमलव स्थानों का उपयोग करने का एक उदाहरण यहां दिया गया है उन दस्तावेज़ों के लिए:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 9, 10, 11 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            a: { $round: [ "$data", -1 ] },
            b: { $round: [ "$data", -2 ] },
            c: { $round: [ "$data", -3 ] },
            d: { $round: [ "$data", -4 ] },
            e: { $round: [ "$data", -5 ] }
          }
     }
   ]
).pretty()

परिणाम:

{
	"data" : 8111.32,
	"a" : 8110,
	"b" : 8100,
	"c" : 8000,
	"d" : 10000,
	"e" : 0
}
{
	"data" : 8514.321,
	"a" : 8510,
	"b" : 8500,
	"c" : 9000,
	"d" : 10000,
	"e" : 0
}
{
	"data" : 8999.454,
	"a" : 9000,
	"b" : 9000,
	"c" : 9000,
	"d" : 10000,
	"e" : 0
}

शून्य का दशमलव स्थान

जब आप 0 . का दशमलव स्थान प्रदान करते हैं , $round ऑपरेटर दशमलव के दाईं ओर पहले अंक का उपयोग करके गोल करता है और गोल पूर्णांक मान देता है।

उदाहरण:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data", 0 ] }
          }
     }
   ]
)

परिणाम:

{ "data" : 8.99, "rounded" : 9 }
{ "data" : 8.45, "rounded" : 8 }
{ "data" : 8.451, "rounded" : 8 }
{ "data" : -8.99, "rounded" : -9 }
{ "data" : -8.45, "rounded" : -8 }
{ "data" : -8.451, "rounded" : -8 }
{ "data" : 8, "rounded" : 8 }
{ "data" : 0, "rounded" : 0 }
{ "data" : 8111.32, "rounded" : 8111 }
{ "data" : 8514.321, "rounded" : 8514 }
{ "data" : 8999.454, "rounded" : 8999 }

संख्या प्रकार

गोल करने के लिए संख्या कोई भी मान्य अभिव्यक्ति हो सकती है जो एक पूर्णांक, डबल, दशमलव, या लंबे समय तक हल हो जाती है। वापसी मान इनपुट मान के डेटा प्रकार से मेल खाता है।

इसलिए यदि हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:

{ "_id" : 12, "data" : NumberDecimal("128.4585") }
{ "_id" : 13, "data" : NumberDecimal("128.12345678912") }

हम $round लागू कर सकते हैं data . के लिए फ़ील्ड:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 12, 13 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            a: { $round: [ "$data", -1 ] },
            b: { $round: [ "$data", 0 ] },
            c: { $round: [ "$data", 3 ] },
            d: { $round: [ "$data", 4 ] },
            e: { $round: [ "$data", 5 ] }
          }
     }
   ]
).pretty()

परिणाम:

{
	"data" : NumberDecimal("128.4585"),
	"a" : NumberDecimal("1.3E+2"),
	"b" : NumberDecimal("128"),
	"c" : NumberDecimal("128.458"),
	"d" : NumberDecimal("128.4585"),
	"e" : NumberDecimal("128.45850")
}
{
	"data" : NumberDecimal("128.12345678912"),
	"a" : NumberDecimal("1.3E+2"),
	"b" : NumberDecimal("128"),
	"c" : NumberDecimal("128.123"),
	"d" : NumberDecimal("128.1235"),
	"e" : NumberDecimal("128.12346")
}

शून्य दशमलव स्थानों तक गोल करना

यदि दूसरा तर्क null है , परिणाम null . है ।

उदाहरण:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data", null ] }
          }
     }
   ]
)

परिणाम:

{ "data" : 8.99, "rounded" : null }
{ "data" : 8.45, "rounded" : null }
{ "data" : 8.451, "rounded" : null }

शून्य मान को पूर्णांकित करना

यदि गोल किया जाने वाला मान null है , परिणाम null . है ।

मान लीजिए कि हम निम्नलिखित दस्तावेज़ को संग्रह में जोड़ते हैं:

{ "_id" : 14, "data" : null }

और हम $round . का उपयोग करते हैं शून्य मान को गोल करने के लिए:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 14 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data", null ] }
          }
     }
   ]
)

परिणाम:

{ "data" : null, "rounded" : null }

राउंडिंग इन्फिनिटी

यदि गोल की जाने वाली संख्या Infinity है , परिणाम Infinity . है . इसी तरह, अगर यह -Infinity है , परिणाम -Infinity . है ।

आइए ऐसे मूल्यों के साथ दो दस्तावेज़ जोड़ें:

{ "_id" : 15, "data" : Infinity }
{ "_id" : 16, "data" : -Infinity }

और आइए उनका चक्कर लगाते हैं:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 15, 16 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data", 2 ] }
          }
     }
   ]
)

परिणाम:

{ "data" : Infinity, "rounded" : Infinity }
{ "data" : -Infinity, "rounded" : -Infinity }

नॉन को गोल करना

राउंडिंग NaN NaN में परिणाम ।

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data" * 2 ] }
          }
     }
   ]
)

परिणाम:

{ "data" : 8.99, "rounded" : NaN }
{ "data" : 8.45, "rounded" : NaN }

गैर-संख्यात्मक प्रकार

यदि आप किसी ऐसे मान को गोल करने का प्रयास करते हैं जो गलत डेटा प्रकार है (अर्थात यह एक पूर्णांक, दोहरा, दशमलव या लंबा नहीं है), तो एक त्रुटि वापस आ जाती है।

मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:

{ "_id" : 17, "data" : "Thirty five" }

और अब हम data . को गोल करने का प्रयास करते हैं फ़ील्ड:

db.test.aggregate(
   [
     { $match: { _id: { $in: [ 17 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            rounded: { $round: [ "$data" ] }
          }
     }
   ]
)

परिणाम:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$round only supports numeric types, not string",
	"code" : 51081,
	"codeName" : "Location51081"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो और उल्का में प्रोग्रामेटिक रूप से फ़ील्ड अपडेट करना

  2. रेल + मोंगोमैपर + एंबेडेड डॉक्यूमेंट फॉर्म मदद

  3. MongoDB में arrayFilters पैरामीटर कैसे काम करता है

  4. टर्मिनल पर रूट पासवर्ड के बिना MySQL से कैसे कनेक्ट करें

  5. एक सरणी के भीतर दस्तावेज़ों को हटाने के लिए MongoDB $pull का उपयोग करना