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と$out100倍高速になることがわかりましたが、制限があるかどうかはわかりませんが、コピーするフィールドのセットを作成する必要があります。次に例を示します。
// 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(、)を使用します