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