33

我已经调用了 mongo db test,在这个 db 中有两个集合collection1collection1_backup. 如何将 的内容替换collection1collection1_backup.

4

7 回答 7

64

做到这一点的最好方法(考虑到集合的名称以 结尾_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
});

这些是最常见的方法。

于 2012-12-17T14:37:10.427 回答
6

这可以使用简单的命令来完成:

db.collection1_backup.aggregate([ { $match: {} }, { $out: "collection1" } ])

此命令将删除collection1 的所有文档,然后在collection1 中克隆collection1_backup。

通用命令将是

db.<SOURCE_COLLECTION>.aggregate([ { $match: {} }, { $out: "<TARGET_COLLECTION>" } ])

如果 TARGET_COLLECTION 不存在,上述命令将创建它。

于 2019-05-06T22:13:49.413 回答
5

也很有用:将集合导出到 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
于 2012-12-17T15:48:50.287 回答
2

只需这样做。

//删除collection1

db.collection1.drop();

//将数据从collection1_backup复制到collection1

db.collection1.insert(db.collection1_backup.find({},{_id:0}).toArray());
于 2019-08-22T07:32:46.190 回答
1

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);
 });
于 2017-03-02T08:33:49.437 回答
1

您可以使用一个简单的命令来备份 MongoDB 集合。它仅适用于MongoDB 4.0 或更早版本

db.sourceCollectionName.copyTo('targetCollectionName')

您的 targetCollectionName 必须在 Single(') 或 Double(") 引用

笔记:

db.collection.copyTo() 方法在内部使用 eval 命令。因此,db.collection.copyTo() 操作采用全局锁,该锁会阻塞所有其他读写操作,直到 db.collection.copyTo() 完成。

于 2017-06-10T11:29:34.163 回答
0

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.

}
于 2014-09-15T10:26:08.463 回答