因为现有项目数据更新,部分字段类型结构发生改变,需要处理,所以找了几种复制的资料
一、在同一个主机上从一个db的表复制到另一个db
db.collection_name.find().forEach(function(d){ db.getSiblingDB('new_database')['collection_name'].insert(d);})collection_name是数据库表名
new_database是目的数据库
克隆本地collection,mongodb没有提供命令进行本地复制,但我们可以写一个循环插入的方法完成
例如:将sys_param_type中的数据复制一份到targetDbName数据库实例中的sys_param_type集合中,代码如下:
db.sys_param_type.find().forEach(function(d){ db.getSiblingDB(‘targetDbName’)[‘sys_param_type’].insert(d);})
二、复制数据库
1.命令:db.copyDatabase(fromdb,todb,fromhost,username,password,mechanism)
参数解释:
- fromdbt: 源db;
- todb: 目标db;
- fromhost: 源db的主机地址,如果在同一个mongod实例内可以省略;
- username: 如果开启了验证模式,需要源DB主机上的MongoDB实例的用户名;
- password: 同上,需要对应用户的密码;
- mechanism: fromhost验证username和password的机制,有:MONGODB-CR、SCRAM-SHA-1两种。
举例:
db.copyDatabase(‘shiroDemoOld’,‘shiroDemoNew’,‘127.0.0.1:27017’,‘root’,‘123456’,‘SCRAM-SHA-1’)
三、复制Collection
第一种方式(runCommand)db.runCommand({
cloneCollection: <namespace>
fromhost: <hostname>
query: <filter>
});
例如:
db.runCommand({cloneCollection:‘testdb.testcol’, from:‘127.0.0.1:27017’,copyIndexes:false, query:{‘age’:{‘gt’:2}}});
copyIndexes:是否复制索引
第二种方式( db.cloneCollection):
db.cloneCollection(fromCollection, toCollection, query)