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