MongoDB शेल में, एक संग्रह से क्वेरी परिणाम लेकर दूसरे संग्रह (अस्थायी/स्टेजिंग के रूप में कार्य करने वाला) में डालने के लिए forEach() का उपयोग करें।
उदाहरण: स्रोत संग्रह
> db.demo43.insertOne({"StudentName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e25d4b3cfb11e5c34d898e5") }
> db.demo43.insertOne({"StudentName":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e25d4b8cfb11e5c34d898e6") }
> db.demo43.insertOne({"StudentName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e25d4bbcfb11e5c34d898e7") }
दस्तावेज़ देखना
> db.demo43.find();
आउटपुट: तीन दस्तावेज़।
कॉपी करें demo44 (अस्थायी संग्रह) में
> db.demo43.find().forEach(function(myDocument) {
db.demo44.insert(myDocument);
});
लक्ष्य संग्रह में सत्यापित करें
> db.demo44.find();
आउटपुट: समान तीन दस्तावेज़ (समान _id के साथ) demo44 में कॉपी किए गए।
व्याख्या
find()एक कर्सर लौटाता है।forEach()प्रत्येक दस्तावेज़ पर पुनरावृत्त करता है।db.demo44.insert(myDocument)प्रत्येक दस्तावेज़ को लक्ष्य संग्रह में डालता है।- मूल
_idमान संरक्षित रहते हैं।
बेहतर विकल्प: एग्रीगेशन $out / $merge (MongoDB 4.2+)
सर्वर-साइड कॉपी के लिए (बड़े डेटासेट के लिए तेज़, कोई नेटवर्क राउंड-ट्रिप नहीं):
> db.demo43.aggregate([ { $match: {} }, { $out: "demo44" } ]);
$outलक्ष्य संग्रह को **बदल देता है** (परमाणु रूप से)।$merge(MongoDB 4.2+) मौजूदा डेटा में मर्ज करता है (अपसर्ट, रिप्लेस, आदि)।
नोट
forEachशेल-ओनली है; ड्राइवर कोड में, कर्सर पर पुनरावृत्त करें औरinsertManyबैच में करें।- बहुत बड़े परिणाम सेट के लिए,
$out/$mergeकाफी तेज़ हैं।