MongoDBコレクションのクローンを作成し、同じサーバーに別の名前で保存したいと思います。たとえば、現在、demo1.categories、demo1.users、demo2.usersのコレクションがあります。
「demo1.categories」と同じ「demo2.categories」が欲しいのですが。(名前が違うだけです。)
MongoDBコレクションのクローンを作成し、同じサーバーに別の名前で保存したいと思います。たとえば、現在、demo1.categories、demo1.users、demo2.usersのコレクションがあります。
「demo1.categories」と同じ「demo2.categories」が欲しいのですが。(名前が違うだけです。)
コレクションの名前が実際に「demo1.categories」であると仮定します。
db.demo1.categories.find().forEach( function(x){db.demo2.categories.insert(x)} );
最も簡単で効率的な方法は、copyTo()を使用することです。したがって、次を使用できます。
db.source.copyTo("target");
&"target"
存在しない場合は作成されます
- アップデート -
CopyToのドキュメントによると、内部でevalを使用しているためcopyTo()
、コピー操作はmongodインスタンスの他のすべての操作をブロックします。したがって、実稼働環境では使用しないでください。
- アップデート -
内部でCopyTo()
使用しているため、バージョン3.0以降は非推奨になっているため、バージョン3.0以降も非推奨になっています。eval()
eval()
CopyTo()
これは、コレクションのクローンを作成するための最速の方法です。
mongoexport -d db_name -c src_collection | mongoimport -d db_name -c dst_collection --drop
db_nameのsrc_collectionをdst_collectionに複製します。または、bsonレベルで2つのステップで実行できます。
mongodump -d db_name -c src_collection
mongorestore --drop -d db_name -c dst_collection ./dump/db_name/src_collection.bson
最速のオプションは
db.myoriginal.aggregate([ { $out: "mycopy" } ])
このためのコマンドはすでにあります。
あるサーバーから別のサーバーに単一のコレクションをコピーします。 http://www.mongodb.org/display/DOCS/cloneCollection+Command
速度が気になる場合は、withを使用aggregate
する$project
と$out
100倍高速になることがわかりましたが、制限があるかどうかはわかりませんが、コピーするフィールドのセットを作成する必要があります。次に例を示します。
// Set of fields in the categories collection
var setOfFields = {field1:1, field2:1.......}
db.demo1.categories.aggregate([{ "$project": setOfFields},{ $out: "demo2.categories"}]);
demo1.categories
これにより、からまでのすべてのドキュメントの選択されたフィールドのセットがコピー(投影)されますdemo2.categories
メソッドを使用しないでください。db.cloneCollection()
現在のバージョンから減価償却され、4.2
代わりにを使用してみてくださいmongoexport
。
mongoコンソールでは、次のことも実行できます。ここで、db_hostは、クローンを作成するコレクションを含むdbがdb_hostにあるマシンです。
db.cloneCollection(、)を使用します