$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 दस्तावेज़ देखें।