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

MongoDB $toObjectId

MongoDB 4.0 से, आप $toObjectId . का उपयोग कर सकते हैं स्ट्रिंग को ऑब्जेक्ट आईडी में बदलने के लिए एग्रीगेशन पाइपलाइन ऑपरेटर।

स्ट्रिंग लंबाई 24 की एक हेक्साडेसिमल स्ट्रिंग होनी चाहिए।

उदाहरण

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

{ "_id" : 1, "bar" : "6008c9a5c8eb4369cf6ad9cc" } 

हम $toObjectId . का उपयोग कर सकते हैं bar को बदलने के लिए ऑपरेटर ऑब्जेक्ट आईडी के लिए फ़ील्ड।

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          bar: { $toObjectId: "$bar" }
        }
    }
  ]
).pretty()

परिणाम:

{ "bar" : ObjectId("6008c9a5c8eb4369cf6ad9cc") } 

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

त्रुटियां

उपरोक्त उदाहरण ने काम किया क्योंकि हमने $toObjectId को लंबाई 24 की एक हेक्साडेसिमल स्ट्रिंग प्रदान की थी ऑपरेटर।

यहां बताया गया है कि जब हम एक ऐसा मान प्रदान करते हैं जो 24 की हेक्साडेसिमल स्ट्रिंग नहीं है:

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          bar: { $toObjectId: "$_id" }
        }
    }
  ]
).pretty()

परिणाम:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "Unsupported conversion from double to objectId in $convert with no onError value",
	"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

यह त्रुटि संपूर्ण एकत्रीकरण कार्रवाई को रोक देती है, और एक खराब दिखने वाली त्रुटि प्रदान करती है।

एक वैकल्पिक तरीका $convert . का उपयोग करना है $toObjectId . के बजाय ऑपरेटर . $convert ऑपरेटर आपको संपूर्ण एकत्रीकरण संचालन को प्रभावित किए बिना त्रुटियों को संभालने की अनुमति देता है।

$toObjectId ऑपरेटर $convert . का उपयोग करने के बराबर है किसी मान को ऑब्जेक्ट आईडी में बदलने के लिए ऑपरेटर।

यहां $convert . का उपयोग करके एक ही उदाहरण दिया गया है :

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

परिणाम:

{ "result" : "An error occurred" } 

$convert . का उपयोग करना त्रुटि होने पर उपयोग करने के लिए हमें त्रुटि संदेश निर्दिष्ट करने की अनुमति दी, और इसने संपूर्ण एकत्रीकरण ऑपरेशन को नहीं रोका।

MongoDB देखें $convert अधिक उदाहरणों के लिए।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं बिना समय के मोंगोइड/रेल का उपयोग करके मोंगोडब से कैसे पूछ सकता हूं?

  2. किसी सरणी में पहले आइटम में मिलान करने के लिए MongoDB को क्वेरी करना

  3. समुदाय से MongoDB उपकरण जो ClusterControl का पूरक है

  4. java.lang.IncompatibleClassChangeError:कक्षा Mongo लागू करना

  5. GoLang में डेटा स्रोत के रूप में MongoDB का उपयोग करना