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

MongoDB $replaceAll

$replaceAll एकत्रीकरण पाइपलाइन ऑपरेटर को MongoDB 4.4 में पेश किया गया था।

यह ऑपरेटर एक इनपुट स्ट्रिंग में खोज स्ट्रिंग के सभी उदाहरणों को एक प्रतिस्थापन स्ट्रिंग के साथ बदल देता है और परिणाम देता है।

यदि खोज स्ट्रिंग नहीं मिलती है, तो $replaceAll इनपुट स्ट्रिंग लौटाता है।

उदाहरण

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

{
	"_id" : 1,
	"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}

आइए $replaceAll . का उपयोग करें स्ट्रिंग के पहले उदाहरण को बदलने के लिए ऑपरेटर Left Handed एक और स्ट्रिंग के साथ:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

परिणाम:

{
	"_id" : 1,
	"product" : "Ambidextrous Screwdriver with Ambidextrous Carry Case"
}

ध्यान दें कि खोज स्ट्रिंग के दोनों उदाहरण (Left Handed ) को बदल दिया गया।

जैसा कि नाम से पता चलता है, $replaceAll सभी . की जगह लेता है खोज स्ट्रिंग की घटनाएँ। केवल पहले . को बदलने के लिए घटना, $replaceOne . का उपयोग करें ।

केस संवेदनशीलता

$replaceAll ऑपरेटर केस सेंसिटिव होता है।

उदाहरण:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Left handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

परिणाम:

{
	"_id" : 1,
	"product" : "Left Handed Screwdriver with Left Handed Carry Case"
}

इस मामले में, मैंने अपनी खोज स्ट्रिंग में एकल वर्ण का मामला बदल दिया है। मैंने Handed बदल दिया करने के लिए handed . इसके परिणामस्वरूप खोज स्ट्रिंग नहीं मिली और इसलिए कुछ भी नहीं बदला गया। इसलिए, इनपुट स्ट्रिंग लौटा दी गई।

डायक्रिटिक सेंसिटिविटी

$replaceAll संचालिका विशेषक संवेदनशील है।

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

{ "_id": 2, "product": "Toupée Tape" }

और अब Toupée . शब्द को खोजने और बदलने की कोशिश करते हैं , लेकिन तीव्र उच्चारण का उपयोग करना न भूलें:

db.products.aggregate([
    { $match: { _id: 2 } },
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Toupee", replacement: "Wig" } }
      }
   }
])

परिणाम:

{ "_id" : 2, "product" : "Toupée Tape" }

कोई परिवर्तन नहीं होता है।

मैंने अपनी खोज स्ट्रिंग में विशेषक शामिल नहीं किया था और इसलिए कोई मेल नहीं था।

यहाँ यह फिर से है, लेकिन इस बार मैं विशेषक शामिल करता हूँ:

db.products.aggregate([
    { $match: { _id: 2 } },
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: "Toupée", replacement: "Wig" } }
      }
   }
])

परिणाम:

{ "_id" : 2, "product" : "Wig Tape" }

इस बार खोज स्ट्रिंग मिली और बदली गई।

अशक्त भाव

यदि $replaceAll . को प्रदान किया गया कोई भी भाव null हैं , परिणाम null . है .

यहां एक null प्रदान करने का एक उदाहरण दिया गया है $replaceAll . के लिए ऑपरेटर फ़ील्ड :

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$product", find: null, replacement: "Ambidextrous" } }
      }
   }
]).pretty()

परिणाम:

{ "_id" : 1, "product" : null }
{ "_id" : 2, "product" : null }

इस मामले में find ऑपरेटर फ़ील्ड null था और इसलिए परिणाम null था ।

अनुपलब्ध फ़ील्ड

अगर input या find ऑपरेटर फ़ील्ड उस फ़ील्ड को संदर्भित करता है जो मौजूद नहीं है, तो परिणाम null . है .

उदाहरण:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$oops", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

परिणाम:

{ "_id" : 1, "product" : null }
{ "_id" : 2, "product" : null }

गैर-स्ट्रिंग मान

$replaceAll . को दिए गए सभी भाव एक स्ट्रिंग या null . का मूल्यांकन करना चाहिए . कोई अन्य प्रकार प्रदान करना एक त्रुटि देता है।

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

{ "_id" : 3, "product" : "Long Weight", "price" : NumberDecimal("7.50") }

आइए एक खोज करने का प्रयास करें और price . पर बदलें फ़ील्ड:

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceAll: { input: "$price", find: "7.50", replacement: "10.50" } }
      }
   }
])

परिणाम:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$replaceAll requires that 'input' be a string, found: 7.50",
	"code" : 51746,
	"codeName" : "Location51746"
} : 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

यह अपेक्षा के अनुरूप त्रुटि देता है।

यूनिकोड सामान्यीकरण

$replaceAll ऑपरेटर कोई यूनिकोड सामान्यीकरण नहीं करता है।

इसके बारे में अधिक जानकारी और एक उदाहरण के लिए MongoDB दस्तावेज़ देखें।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में लेनदेन समर्थन

  2. $group by . के बाद डायनामिक कुंजियाँ

  3. PHP 7 MongoDB क्लाइंट/ड्राइवर स्थापित कर रहा है?

  4. MongoDB एक अनुक्रमित कॉलम पर गिनती (विशिष्ट x) का चयन करें - बड़े डेटा सेट के लिए अद्वितीय परिणाम गिनें

  5. MongoDB स्कीमा डिज़ाइन - कई छोटे दस्तावेज़ या कम बड़े दस्तावेज़?