我的mongo db名为test
,在此db中有两个集合collection1
和collection1_backup
。
如何使用collection1
中的数据替换collection1_backup
的内容。
答案 0 :(得分:35)
完成此操作的最佳方法(考虑到集合的名称以_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
});
这是最常用的方法。
答案 1 :(得分:3)
也很有用: 将集合导出到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
答案 2 :(得分:2)
您可以使用简单命令备份MongoDB Collection
db.sourceCollectionName.copyTo('targetCollectionName')
您的targetCollectionName必须为Single(')或Double(“)Quote
注意:
db.collection.copyTo()方法在内部使用eval命令。如 结果,db.collection.copyTo()操作采用全局锁定 阻止所有其他读写操作,直到 db.collection.copyTo()完成。
答案 3 :(得分:1)
更好的方法是使用.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);
});
答案 4 :(得分:0)
使用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.
}
答案 5 :(得分:0)
这可以使用简单的命令来完成:
db.collection1_backup.aggregate([ { $match: {} }, { $out: "collection1" } ])
此命令将删除collection1的所有文档,然后在collection1中克隆collection1_backup。
通用命令为
db.<SOURCE_COLLECTION>.aggregate([ { $match: {} }, { $out: "<TARGET_COLLECTION>" } ])
如果TARGET_COLLECTION不存在,则上述命令将创建它。
答案 6 :(得分:0)
只需执行此操作。
// drop collection1
db.collection1.drop();
///将数据从collection1_backup复制到collection1
db.collection1.insert(db.collection1_backup.find({},{_id:0}).toArray());