59

MongoDBコレクションのクローンを作成し、同じサーバーに別の名前で保存したいと思います。たとえば、現在、demo1.categories、demo1.users、demo2.usersのコレクションがあります。

「demo1.categories」と同じ「demo2.categories」が欲しいのですが。(名前が違うだけです。)

4

8 に答える 8

83

さらに、MongoDBのドキュメントが役に立ちます

コレクションの名前が実際に「demo1.categories」であると仮定します。

db.demo1.categories.find().forEach( function(x){db.demo2.categories.insert(x)} );
于 2012-01-19T21:45:00.887 に答える
31

最も簡単で効率的な方法は、copyTo()を使用することです。したがって、次を使用できます。

db.source.copyTo("target"); 

"target"存在しない場合は作成されます

- アップデート -

CopyToのドキュメントによると、内部でevalを使用しているためcopyTo()、コピー操作はmongodインスタンスの他のすべての操作をブロックします。したがって、実稼働環境では使用しないでください。

- アップデート -

内部でCopyTo()使用しているため、バージョン3.0以降は非推奨になっているため、バージョン3.0以降も非推奨になっています。eval()eval()CopyTo()

于 2014-01-19T17:43:51.140 に答える
28

これは、コレクションのクローンを作成するための最速の方法です。

mongoexport -d db_name -c src_collection | mongoimport -d db_name -c dst_collection --drop

db_nameのsrc_collectiondst_collectionに複製します。または、bsonレベルで2つのステップで実行できます。

mongodump -d db_name -c src_collection
mongorestore --drop -d db_name -c dst_collection ./dump/db_name/src_collection.bson
于 2014-07-25T21:31:01.847 に答える
20

最速のオプションは

db.myoriginal.aggregate([ { $out: "mycopy" } ])
于 2016-06-17T19:52:51.040 に答える
2

このためのコマンドはすでにあります。

あるサーバーから別のサーバーに単一のコレクションをコピーします。 http://www.mongodb.org/display/DOCS/cloneCollection+Command

于 2012-05-30T01:26:08.587 に答える
2

速度が気になる場合は、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

于 2015-07-02T18:13:55.840 に答える
0

メソッドを使用しないでください。db.cloneCollection()現在のバージョンから減価償却され、4.2代わりにを使用してみてくださいmongoexport

減価償却後の回収方法

于 2020-01-23T09:08:22.353 に答える
-4

mongoコンソールでは、次のことも実行できます。ここで、db_hostは、クローンを作成するコレクションを含むdbがdb_hostにあるマシンです。

db.cloneCollection(、)を使用します

于 2012-08-09T15:33:12.947 に答える