mongodb mongo从一个集合复制到另一个集合(在同一个db上)

nfg76nw0  于 2023-10-16  发布在  Go
关注(0)|答案(9)|浏览(280)

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

mnemlml8

mnemlml81#

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

这些是最常见的方法。

6rvt4ljy

6rvt4ljy2#

这可以通过这个简单的命令来实现:

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

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

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

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

jfgube3f

jfgube3f3#

也有用:将集合导出到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
eyh26e7m

eyh26e7m4#

就这么做
//drop collection1

db.collection1.drop();

//将数据从collection1_backup复制到collection 1

db.collection1.insert(db.collection1_backup.find({},{_id:0}).toArray());
wdebmtf2

wdebmtf25#

使用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.

}
lrpiutwd

lrpiutwd6#

更好的方法是使用.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);
 });
yjghlzjz

yjghlzjz7#

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

db.sourceCollectionName.copyTo('targetCollectionName')

您的targetCollectionName必须使用单引号(')或双引号(“)

注意事项:
copyTo()方法在内部使用eval命令。因此,db.collection.copyTo()操作采用一个全局锁,该锁阻止所有其他读写操作,直到db.collection.copyTo()完成。

holgip5t

holgip5t8#

水滴收集1
然后使用此查询

var cursor = db.collection1_backup.find();
var data = [];
while(cursor.hasNest()){
    data.push(cursor.next());
}

db.collection1.insertMany(data)
sirbozc5

sirbozc59#

只要运行这个简单的查询.

db.collection1.insertMany(db.collection1_backup.find({}).toArray())

运行此简单查询,将collection1_backupcollection中的所有数据复制到collection1collection中。

相关问题