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

MongoDB $replaceOne

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

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

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

उदाहरण

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

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

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

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

परिणाम:

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

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

सभी उदाहरणों को बदलने के लिए, $replaceAll . का उपयोग करें ऑपरेटर।

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

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

उदाहरण:

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

परिणाम:

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

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

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

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

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

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

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

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

परिणाम:

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

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

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

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

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

परिणाम:

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

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

अशक्त भाव

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

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

db.products.aggregate([
   {
     $project:
      {
         product: { $replaceOne: { 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: { $replaceOne: { input: "$oops", find: "Left Handed", replacement: "Ambidextrous" } }
      }
   }
]).pretty()

परिणाम:

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

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

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

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

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

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

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

परिणाम:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$replaceOne 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

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

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

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

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB के बारे में

  2. $ और एकाधिक $or . के साथ MongoDB क्वेरी करें

  3. MongoDB 2.6 एकत्रीकरण ढांचे में सुधार

  4. MongoDB के लिए सामान्य विफलता परिदृश्यों को ठीक करने के लिए बैकअप का उपयोग करना

  5. एकत्रीकरण प्रश्नों पर MongoDB का प्रदर्शन