MongoDB में $set और update() का उपयोग करके फील्ड मान कॉपी करना
MongoDB में किसी फील्ड का मान दूसरे फील्ड में कॉपी करने के लिए forEach() लूप के साथ $set और update() का उपयोग करें।
उदाहरण: संग्रह और दस्तावेज़ बनाना
> db.demo55.insertOne({"ShippingDate":"","date":new ISODate("2019-01-21")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2716dfcfb11e5c34d89915") }
> db.demo55.insertOne({"ShippingDate":"","date":new ISODate("2020-05-12")});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2716ebcfb11e5c34d89916") }
दस्तावेज़ देखना (अपडेट से पहले)
> db.demo55.find();
आउटपुट:
{ "_id" : ObjectId("5e2716dfcfb11e5c34d89915"), "ShippingDate" : "", "date" : ISODate("2019-01-21T00:00:00Z") }
{ "_id" : ObjectId("5e2716ebcfb11e5c34d89916"), "ShippingDate" : "", "date" : ISODate("2020-05-12T00:00:00Z") }
फील्ड मान कॉपी करने के लिए क्वेरी
> db.demo55.find({}).forEach(function(c){
db.demo55.update({_id: c._id}, {$set: {ShippingDate:c.date}});
});
अपडेट के बाद दस्तावेज़ देखना
> db.demo55.find();
आउटपुट:
{ "_id" : ObjectId("5e2716dfcfb11e5c34d89915"), "ShippingDate" : ISODate("2019-01-21T00:00:00Z"), "date" : ISODate("2019-01-21T00:00:00Z") }
{ "_id" : ObjectId("5e2716ebcfb11e5c34d89916"), "ShippingDate" : ISODate("2020-05-12T00:00:00Z"), "date" : ISODate("2020-05-12T00:00:00Z") }
आधुनिक और कुशल विकल्प (MongoDB 4.2+):
एग्रीगेशन पाइपलाइन के साथ updateMany() का उपयोग करें - यह एटॉमिक है और तेज़ है:
db.demo55.updateMany(
{},
[{ $set: { ShippingDate: "$date" } }]
)
लाभ:
- सिंगल ऑपरेशन (एटॉमिक)
- क्लाइंट-साइड लूप की आवश्यकता नहीं
- बड़े संग्रह के लिए बेहतर प्रदर्शन
- शार्डेड क्लस्टर पर काम करता है
नोट: एग्रीगेशन पाइपलाइन अपडेट में $set फील्ड रेफरेंस "$fieldName" सिंटैक्स का उपयोग करता है।