Per collection.copyTo()
dokumentasi di MongoDB 2.4, pembantu shell ini "menyalin semua dokumen dari koleksi ke koleksi baru menggunakan JavaScript sisi server".
Saya mengharapkan alasan Anda mendapatkan unauthorized kesalahan adalah karena sisi server db.eval() perintah
memerlukan izin admin penuh
di MongoDB 2.4 (beberapa peran di admin basis data).
Anda sebenarnya dapat melihat sumber untuk helper ini di mongo shell jika Anda memanggil copyTo() tanpa () :
> 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
);
}
Karena penggunaan db.eval() sisi server , ada beberapa peringatan signifikan
di copyTo() penggunaan termasuk peringatan tentang kesetiaan jenis dan masalah penguncian. Saya yakin helper ini hanya dimaksudkan untuk digunakan di lingkungan pengembangan dengan izin yang lebih terbuka, daripada lingkungan produksi.
salinan DIY dari mongo cangkang
Itu bukan pilihan yang sepenuhnya gila :). Berikut adalah satu baris sederhana untuk mongo shell (ganti source dan target koleksi yang sesuai):
db.source.find().forEach( function(d) {db.target.insert(d)});
Jika Anda khawatir tentang bandwidth jaringan, Anda dapat menjalankannya dari mongo shell yang lokal ke server MongoDB Anda.
Salin dengan mongodump / mongorestore
Pendekatan yang lebih baik untuk menyalin koleksi (walaupun tidak langsung dari mongo shell) akan menggunakan mongodump &mongorestore :
$ mongodump -d test -c source
$ mongorestore -d test -c target dump/test/source.bson