collection.copyTo()による
MongoDB 2.4のドキュメントでは、このシェルヘルパーは「サーバー側のJavaScriptを使用してコレクションからnewCollectionにすべてのドキュメントをコピーします」。
unauthorizedを取得する理由を期待しています エラーは、サーバー側の db.eval() コマンド
完全な管理者権限
が必要です MongoDB 2.4(adminの複数のロール データベース)。
このヘルパーのソースは、mongoで実際に確認できます。 copyTo()を呼び出すとシェル ()なし :
> 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から直接ではありません) shell)はmongodumpを使用することです &mongorestore :
$ mongodump -d test -c source
$ mongorestore -d test -c target dump/test/source.bson