प्रति collection.copyTo()
MongoDB 2.4 में प्रलेखन, यह शेल सहायक "सर्वर-साइड जावास्क्रिप्ट का उपयोग करके संग्रह से सभी दस्तावेज़ों को नए संग्रह में कॉपी करता है"।
मुझे उम्मीद है कि आपको unauthorized
मिलने का कारण क्या होगा? त्रुटि इसलिए है क्योंकि सर्वर-साइड db.eval()
आदेश
पूर्ण व्यवस्थापक अनुमतियों
की आवश्यकता है MongoDB 2.4 में (admin
. पर कई भूमिकाएं) डेटाबेस)।
आप वास्तव में इस सहायक के स्रोत को mongo
. में देख सकते हैं खोल अगर आप copyTo()
invoke का आह्वान करते हैं बिना ()
. के :
> db.test.copyTo
function ( newName ){
return this.getDB().eval(
function( collName , newName ){
var from = db[collName];
var to = db[newName];
to.ensureIndex( { _id : 1 } );
var count = 0;
var cursor = from.find();
while ( cursor.hasNext() ){
var o = cursor.next();
count++;
to.save( o );
}
return count;
} , this.getName() , newName
);
}
सर्वर-साइड के उपयोग के कारण db.eval()
, कई महत्वपूर्ण चेतावनियां हैं
पर copyTo()
टाइप फ़िडेलिटी और लॉकिंग मुद्दों पर सावधानी सहित उपयोग। मेरा मानना है कि यह सहायक केवल उत्पादन वातावरण के बजाय विकास वातावरण में अधिक खुली अनुमतियों के साथ उपयोग करने का इरादा रखता है।
mongo
. से DIY कॉपी खोल
यह पूरी तरह से पागल विकल्प नहीं है :)। यहाँ mongo
. के लिए एक सरल एक-लाइनर है खोल (source
को बदलें और target
संग्रह उपयुक्त के रूप में):
db.source.find().forEach( function(d) {db.target.insert(d)});
यदि आप नेटवर्क बैंडविड्थ के बारे में चिंतित हैं तो आप इसे mongo
. से चला सकते हैं शेल जो आपके MongoDB सर्वर के लिए स्थानीय है।
mongodump
के साथ कॉपी करें / mongorestore
संग्रह की प्रतिलिपि बनाने का एक बेहतर तरीका (हालांकि सीधे mongo
. से नहीं खोल) mongodump
. का उपयोग करना होगा &mongorestore
:
$ mongodump -d test -c source
$ mongorestore -d test -c target dump/test/source.bson