mongo从一个集合复制到另一个集合(在同一个数据库中)

时间:2012-12-17 14:26:53

标签: mongodb

我的mongo db名为test,在此db中有两个集合collection1collection1_backup。 如何使用collection1中的数据替换collection1_backup的内容。

7 个答案:

答案 0 :(得分:35)

完成此操作的最佳方法(考虑到集合的名称以_backup结尾)可能是使用了mongorestore:http://docs.mongodb.org/manual/reference/mongorestore/

然而,在这种情况下,它取决于。如果集合未加密,您可以使用renameCollectionhttp://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());