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

मोंगोडीबी $कन्वर्ट

MongoDB में, आप $convert . का उपयोग कर सकते हैं एक मान को एक निर्दिष्ट प्रकार में बदलने के लिए एकत्रीकरण पाइपलाइन ऑपरेटर।

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

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

आप वैकल्पिक रूप से onError . का उपयोग कर सकते हैं यह निर्दिष्ट करने के लिए पैरामीटर कि त्रुटि की स्थिति में क्या लौटाया जाए। आप वैकल्पिक रूप से onNull . का उपयोग कर सकते हैं यह निर्दिष्ट करने के लिए पैरामीटर कि इनपुट मान शून्य या अनुपलब्ध होने पर क्या लौटाया जाए।

नमूना डेटा

मान लीजिए हमारे पास samples . नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:

{
	"_id" : ObjectId("6011e471c8eb4369cf6ad9d5"),
	"double" : 123.75,
	"string" : "123",
	"boolean" : true,
	"date" : ISODate("2020-12-31T23:30:15.123Z"),
	"integer" : 123,
	"long" : NumberLong(123),
	"decimal" : NumberDecimal("123.75"),
	"datestring" : "2021-02-15 06:53:55"
}

निम्नलिखित उदाहरण प्रदर्शित करते हैं कि प्रत्येक फ़ील्ड को अन्य प्रकारों में कैसे परिवर्तित किया जाए।

ऑब्जेक्ट आईडी को स्ट्रिंग में बदलें

_id उपरोक्त दस्तावेज़ में फ़ील्ड एक ObjectId है। यहां ObjectId को एक स्ट्रिंग में बदलने का एक उदाहरण दिया गया है।

db.samples.aggregate(
  [
    {
      $project:
        { 
          result: 
          {
            $convert: { 
              input: "$_id", 
              to: "string",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
).pretty()

परिणाम:

{
	"_id" : ObjectId("6011e471c8eb4369cf6ad9d5"),
	"result" : "6011e471c8eb4369cf6ad9d5"
}

नतीजा यह है कि ऑब्जेक्ट आईडी से हेक्साडेसिमल स्ट्रिंग को स्ट्रिंग के रूप में वापस कर दिया जाता है।

डबल को इंटीजर में बदलें

जब आप डबल को पूर्णांक में बदलते हैं, तो छोटा किया गया मान वापस आ जाता है।

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$double", 
              to: "int",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : 123 }

छोटा किया गया दोहरा मान किसी पूर्णांक के लिए न्यूनतम और अधिकतम मान के भीतर होना चाहिए। यदि ऐसा नहीं होता है तो कोई त्रुटि होगी।

साथ ही, आप एक दोहरे मान को परिवर्तित नहीं कर सकते जिसका छोटा किया गया मान न्यूनतम पूर्णांक मान से कम है या अधिकतम पूर्णांक मान से अधिक है।

स्ट्रिंग को पूर्णांक में बदलें

जब आप किसी स्ट्रिंग को पूर्णांक में कनवर्ट करते हैं, $convert स्ट्रिंग के संख्यात्मक मान को पूर्णांक के रूप में लौटाता है।

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$string", 
              to: "int",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : 123 }

स्ट्रिंग मान एक आधार होना चाहिए10 पूर्णांक (उदा. "-123" , "123" ) और एक पूर्णांक के लिए न्यूनतम और अधिकतम मान के भीतर आते हैं।

बूलियन को पूर्णांक में बदलें

जब आप एक बूलियन को एक पूर्णांक में बदलते हैं, $convert रिटर्न 1 true . के बूलियन मान के लिए , और 0 false . के बूलियन मान के लिए ।

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$boolean", 
              to: "int",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : 1 }

तिथि को स्ट्रिंग में बदलें

आप $convert . का उपयोग कर सकते हैं एक तारीख को एक स्ट्रिंग के रूप में वापस करने के लिए।

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$date", 
              to: "string",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : "2020-12-31T23:30:15.123Z" }

दिनांक वस्तु को एक स्ट्रिंग में बदल दिया गया है।

डबल टू डेट कन्वर्ट करें

निम्नलिखित प्रकारों को दिनांक में परिवर्तित किया जा सकता है:

  • डबल
  • दशमलव
  • लंबी
  • स्ट्रिंग
  • ऑब्जेक्ट आईडी

डबल को डेट में बदलने का एक उदाहरण यहां दिया गया है:

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$double", 
              to: "date",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : ISODate("1970-01-01T00:00:00.123Z") } 

जब आप संख्याओं को दिनांक में परिवर्तित करते हैं, तो संख्या 1 जनवरी, 1970 से मिलीसेकंड की संख्या को दर्शाती है।

हमारे उदाहरण में, हमने 123 . का दोहरा मान प्रदान किया है , जिसकी व्याख्या 1 जनवरी, 1970 से 123 मिलीसेकंड के रूप में की गई थी।

पूर्णांक को दशमलव में बदलें

एक पूर्णांक को दशमलव में बदलने का एक उदाहरण यहां दिया गया है:

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$integer", 
              to: "decimal",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : NumberDecimal("123.000000000000") } 

स्ट्रिंग को दिनांक में बदलें

दिनांक/समय स्ट्रिंग को दिनांक ऑब्जेक्ट में कनवर्ट करने का एक उदाहरण यहां दिया गया है:

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$datestring", 
              to: "date",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : ISODate("2021-02-15T06:53:55Z") } 

जब आप किसी स्ट्रिंग को दिनांक ऑब्जेक्ट में कनवर्ट करते हैं, तो स्ट्रिंग एक मान्य दिनांक स्ट्रिंग होनी चाहिए, जैसे:

  • 2021-02-15
  • 2021-02-15टी06:53:55
  • 2021-02-15T06:53:55Z

बूलियन में कनवर्ट करें

जब आप किसी मान को बूलियन में कनवर्ट करते हैं, तो परिणाम true . होगा या false , इनपुट मान के आधार पर।

आम तौर पर, संख्यात्मक मानों के लिए, यह false लौटाएगा यदि मान शून्य है (0 ), और true किसी अन्य मूल्य के लिए।

स्ट्रिंग, ऑब्जेक्ट आईडी और दिनांक मानों के लिए, यह हमेशा true लौटाएगा ।

db.samples.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$string", 
              to: "bool",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : true }

onError पैरामीटर

आप onError . का उपयोग कर सकते हैं त्रुटि होने की स्थिति में एक निर्दिष्ट मान वापस करने के लिए पैरामीटर।

मान लीजिए हमारे पास dogs . नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:

{ "_id" : 1, "name" : "Wag", "born" : "March 2020", "weight" : null }

नीचे एक ऐसा रूपांतरण करने का प्रयास करने का एक उदाहरण है जो किसी त्रुटि के कारण विफल हो जाता है। पहले उदाहरण में, हम नहीं onError का उपयोग करें ।

db.dogs.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$born", 
              to: "int"
            }
          }
        }
    }
  ]
)

परिणाम:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "Failed to parse number 'March 2020' in $convert with no onError value: Did not consume whole string.",
	"code" : 241,
	"codeName" : "ConversionFailure"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

इसके परिणामस्वरूप एक बुरा त्रुटि संदेश प्रदर्शित हो रहा था।

निम्न उदाहरण दिखाता है कि कैसे हम onError . का उपयोग करके इसे बेहतर बना सकते हैं पैरामीटर।

db.dogs.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$born", 
              to: "int",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : "An error occurred" }

ध्यान दें कि हमें अभी भी दस्तावेज़ वापस मिलता है, और हमारा कस्टम त्रुटि संदेश फ़ील्ड में प्रदर्शित होता है।

onNull पैरामीटर

आप वैकल्पिक रूप से onNull . का उपयोग कर सकते हैं यह निर्दिष्ट करने के लिए पैरामीटर कि इनपुट मान शून्य या अनुपलब्ध होने पर क्या लौटाया जाए।

पिछले दस्तावेज़ का उपयोग करके, हम onNull . का परीक्षण कर सकते हैं इस तरह पैरामीटर:

db.dogs.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$weight", 
              to: "decimal",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

परिणाम:

{ "result" : "Input was null or empty" }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में किसी दिनांक से कार्यवृत्त प्राप्त करने के 5 तरीके

  2. php MongoCursor से JSON डेटा कैसे लौटाएं?

  3. सूची में टैग के साथ दस्तावेज़ प्राप्त करें, मैचों की कुल संख्या के अनुसार आदेश दें

  4. BadValue अमान्य है या कोई उपयोगकर्ता स्थान सेट नहीं है। कृपया सुनिश्चित करें कि LANG और/या LC_* पर्यावरण चर सही ढंग से सेट हैं

  5. MongoDB में एम्बेडेड दस्तावेज़ को सरणी में बदलना