前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongo复制数据库和表

mongo复制数据库和表

作者头像
周小董
发布2019-03-25 14:29:36
5.9K0
发布2019-03-25 14:29:36
举报
文章被收录于专栏:python前行者python前行者
  • 在同一个主机上从一个db的表复制到另一个db的表
代码语言:javascript
复制
db.collection_name.find().forEach(function(d){ db.getSiblingDB('new_database')['collection_name'].insert(d);})

collection_name是数据库表名 new_database是目的数据库

克隆本地collection,mongodb没有提供命令进行本地复制,但我们可以写一个循环插入的方法完成

例如:将source_collection中的数据复制一份到target_collection,代码如下:

代码语言:javascript
复制
db.source_collection.find().forEach(function(x){db.target_collection.insert(x)})

1. 复制数据库

1.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两种。

代码语言:javascript
复制
db.copyDatabase('test','test2','192.168.14.52:27017','test','test','SCRAM-SHA-1')
1.2

db.runCommand()

代码语言:javascript
复制
{ copydb: 1,
  fromhost: <hostname>,
  fromdb:   <database>,
  todb:     <database>,
  slaveOk:  <bool>,
  username: <username>,
  nonce:    <nonce>,
  key:      <key>
}

fromhost: 可选,见1.1; slaveOK: 可选,设置为true,允许从secondary复制数据,此时fromehost必须被设置; username: 可选,见1.1; nonce: 远程服务器上产生的一次性共享密钥; key: 对password的hash值

2. 复制Collection

2.1 runCommand
代码语言:javascript
复制
db.runCommand({

  cloneCollection: <namespace>

  fromhost:         <hostname>

  query:               <filter>

});

代码语言:javascript
复制
db.runCommand({cloneCollection:'testdb.testcol', from:'192.168.1.12:27017',copyIndexes:false, query:{'age':{'gt':2}}});

copyIndexes:是否复制索引

2.2 db.cloneCollection
代码语言:javascript
复制
db.cloneCollection(from, collection, query)

3 其它

刷新磁盘:将内存中尚未写入磁盘的信息写入磁盘,并锁住对数据库更新的操作,但读操作可以使用,使用runCommand命令,这个命令只能在admin库上执行 格式:db.runCommand({fsync:1,async:true}) async:是否异步执行 lock:1 锁定数据库

数据压缩:mongodb的存储结构采用了预分配的机制,长期不断的操作,会留下太多的的碎片,从而导致数据库系统越来越慢。 repairDatabase命令是mongodb内置的一个方法,它会扫描数据库中的所有数据,并将通过导入/导出来重新整理数据集合,将碎片清理干净 现在看压缩前和压缩后的对比数据,如下所示:

代码语言:javascript
复制
PRIMARY> db.t1.storageSize()
65232896
PRIMARY> db.t1.totalSize()
81470432
PRIMARY> db.repairDatabase()
{ “ok” : 1 }
PRIMARY> db.t1.storageSize()
65232896
PRIMARY> db.t1.totalSize()
79851584

参考:https://blog.csdn.net/kturing/article/details/73302014 https://blog.csdn.net/xingchen1106/article/details/45477409

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 复制数据库
    • 1.1
      • 1.2
      • 2. 复制Collection
        • 2.1 runCommand
          • 2.2 db.cloneCollection
          • 3 其它
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档