私はmongodbを呼び出しtest
、このdbには2つのコレクションcollection1
とを持っていcollection1_backup
ます。のコンテンツをcollection1
からのデータに置き換える方法collection1_backup
。
7 に答える
これを行うための最良の方法(コレクションの名前がで終わることを考慮すると_backup
)は、おそらくmongorestoreを使用することです:http://docs.mongodb.org/manual/reference/mongorestore/
ただし、この場合は状況によって異なります。コレクションがシャーディングされていない場合は、renameCollection
(http://docs.mongodb.org/manual/reference/command/renameCollection/)を使用するか、(JavaScriptコードで)より手動の方法を使用できます。
db.collection1.drop(); // Drop entire other collection
db.collection1_backup.find().forEach(function(doc){
db.collection1.insert(doc); // start to replace
});
これらは、これを行うための最も一般的な方法です。
これは、次の簡単なコマンドを使用して実行できます。
db.collection1_backup.aggregate([ { $match: {} }, { $out: "collection1" } ])
このコマンドは、collection1のすべてのドキュメントを削除してから、collection1にcollection1_backupのクローンを作成します。
一般的なコマンドは
db.<SOURCE_COLLECTION>.aggregate([ { $match: {} }, { $out: "<TARGET_COLLECTION>" } ])
TARGET_COLLECTIONが存在しない場合は、上記のコマンドで作成されます。
また便利です:コレクションをjsonファイルにエクスポートします
mongoexport --collection collection1_backup --out collection1.json
jsonファイルからコレクションをインポートするには
mongoimport --db test --collection collection1 --file collection1.json
バックアップ/ダンプファイルから単一のコレクションをインポートするには、を使用して*.bsonファイルを*.jsonに変換する必要があります
bsondump collection1_backup.bson > collection1_backup.json
単にこれを行うだけです。
//コレクション1を削除します
db.collection1.drop();
//collection1_backupからcollection1にデータをコピーします
db.collection1.insert(db.collection1_backup.find({},{_id:0}).toArray());
より良い方法は使用することです.toArray()
db.collection1.drop(); // Drop entire other collection
// creates an array which can be accessed from "data"
db.collection1_backup.find().toArray(function(err, data) {
// creates a collection and inserting the array at once
db.collection1.insert(data);
});
簡単なコマンドを使用して、MongoDBコレクションをバックアップできます。MongoDB4.0以前のバージョンでのみ動作します。
db.sourceCollectionName.copyTo('targetCollectionName')
targetCollectionNameはSingle(')またはDouble( ")である必要があります引用
ノート:
db.collection.copyTo()メソッドは、内部でevalコマンドを使用します。その結果、db.collection.copyTo()操作は、db.collection.copyTo()が完了するまで、他のすべての読み取りおよび書き込み操作をブロックするグローバルロックを取得します。
Javaドライバーの使用
以下を試してください:
public void copyTo(String db,String sourceCollection,String destinationCollection,int limit) throws
UnknownHostException {
MongoClient mongo = new MongoClient("localhost", 27017);
DB database = mongo.getDB(db);
DBCollection collection = database.getCollection(sourceCollection);
DBCursor dbCursor = collection.find().limit(limit);
List<DBObject> list = dbCursor.toArray();
DBCollection destination = database.getCollection(destinationCollection);
destination.insert(list, WriteConcern.NORMAL); //WRITE CONCERN is based on your requirment.
}