MongoDB में $set का उपयोग करके फ़ील्ड को स्वयं के आधार पर अपडेट करना
MongoDB में आप सीधे { $set: { field: field + "suffix" } } नहीं कर सकते क्योंकि फ़ील्ड रेफरेंस अपडेट ऑपरेशन में समर्थित नहीं है। इसके लिए एग्रीगेशन पाइपलाइन (MongoDB 4.2+) या एप्लिकेशन-लेवल लॉजिक आवश्यक है।
सैंपल डेटा बनाना
> db.demo256.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e47a3e91627c0c63e7dba8b") }
> db.demo256.insertOne({"Name":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e47a3ea1627c0c63e7dba8c") }
> db.demo256.insertOne({"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e47a3eb1627c0c63e7dba8d") }
दस्तावेज़ देखना
> db.demo256.find();
आउटपुट:
उदाहरण में गलत दृष्टिकोण
आउटपुट (गलत - स्ट्रिंग लिटरल जोड़ा गया):
समस्या
"Name" + " is a student"स्ट्रिंग कन्कैटनेशन है, फ़ील्ड रेफरेंस नहीं। यह फ़ील्ड मान को शाब्दिक स्ट्रिंग "Name is a student" पर सेट करता है।सही समाधान: एग्रीगेशन पाइपलाइन अपडेट (MongoDB 4.2+)
सही आउटपुट:
पुराने वर्जन के लिए: एप्लिकेशन-लेवल अपडेट
उपयोगी स्ट्रिंग ऑपरेटर्स (एग्रीगेशन में)
$concat: स्ट्रिंग्स जोड़ें$substr: सबस्ट्रिंग निकालें$toLower/$toUpper: केस बदलें$trim: व्हाइटस्पेस हटाएं
नोट
मूल उदाहरण में गलत दृष्टिकोण दिखाया गया है। यह एक सामान्य गलतफहमी है - MongoDB अपडेट ऑपरेटर्स ($set, $inc, आदि) में फ़ील्ड रेफरेंस का समर्थन नहीं करते; केवल एग्रीगेशन पाइपलाइन अपडेट (4.2+) में अभिव्यक्तियों का उपयोग कर सकते हैं।