一、在同一个主机上从一个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)