我已经调用了 mongo db test
,在这个 db 中有两个集合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
只需这样做。
//删除collection1
db.collection1.drop();
//将数据从collection1_backup复制到collection1
db.collection1.insert(db.collection1_backup.find({},{_id:0}).toArray());
Better way would be to use .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 集合。它仅适用于MongoDB 4.0 或更早版本。
db.sourceCollectionName.copyTo('targetCollectionName')
您的 targetCollectionName 必须在 Single(') 或 Double(") 引用
笔记:
db.collection.copyTo() 方法在内部使用 eval 命令。因此,db.collection.copyTo() 操作采用全局锁,该锁会阻塞所有其他读写操作,直到 db.collection.copyTo() 完成。
Using Java Driver
Try below one:
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.
}