背景

  • 发现有两个mongodb环境的数据库表索引不一致,另一个数据库有索引缺失,需要将一个数据库里的所有表索引导入到另一个数据库
  • 也可用于单独备份数据库所有表的索引

写mongo shell的js脚本可参考官方文档https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell

导出导入索引的js脚本

// 当前脚本名为exportImportIndexes.js
let joinStr = "*_*"; // 查询所有表的索引
function findAllIndexes() {
// 获取所有表
let allCollections = db.getCollectionNames();
for (var colName of allCollections) {
let indexes = db.getCollection(colName).getIndexes();
// 输出表索引信息
print(colName, joinStr, JSON.stringify(indexes));
}
} // 添加所有表的索引
// 前提是通过findAllIndexes函数将所有表的索引写入了当前执行路径下的all_indexes.txt文件
function addAllIndexes() {
// 获取所有索引,一行代表一张表的索引
let indexes = cat('./all_indexes.txt');
lines = indexes.split('\n');
// 遍历所有表的索引
for (var line of lines) {
print("line:", line);
let items = line.split(joinStr);
if (items.length !== 2) {
continue
} let colName = items[0].trim();
let indexes = items[1].trim(); if (indexes === "") {
continue
} for (var index of JSON.parse(indexes)) {
print("begin add collectionName:", colName, "index:", JSON.stringify(index));
// 一次只创建一个索引,防止批量创建索引过程中的错误可能导致多个索引创建失败
let rs = db.runCommand(
{
createIndexes: colName,
indexes: [index]
}
);
print("operation result:", JSON.stringify(rs),"\n");
}
print("\n");
}
} // 导出索引执行findAllIndexes
// findAllIndexes(); // 导入索引执行addAllIndexes
// addAllIndexes();

导出导入索引的执行过程

假设要导出的mongodb地址是localhost:27011,db是test1

要导入的mongodb地址是localhost:27012,db是test2

  • 导出时只将"findAllIndexes();"这一行取消注释,执行命令: mongo localhost:27011/test1 exportImportIndexes.js > all_indexes.txt
  • 导入时只将"addAllIndexes();"这一行取消注释,执行命令: mongo localhost:27012/test2 exportImportIndexes.js > index_result.txt

mongodb表索引备份,索引的导出导入的更多相关文章

  1. 【Oracle】OCR的备份和恢复之导出导入

    使用导出导入进行OCR的备份和恢复: 在对集群做调整前.如:增删节点等操作前,应该对OCR进行一次备份.能够使用export备份到指定文件. 实验环境: OS:OEL5.6 RAC:10.2.0.1. ...

  2. MongoDB备份恢复与导出导入

    说明:本文所有操作均在win7下的MongoDB3.4.4版本中进行. 一.备份与恢复 1. 备份: mongodump -h IP --port 端口 -u 用户名 -p 密码 -d数据库 -o 文 ...

  3. Oracle数据库备份 expdp/impdp导出导入命令

    使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...

  4. SQL SERVER几种数据迁移/导出导入的实践

    SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据 ...

  5. MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁

    权限                                                                                             绑定内网I ...

  6. mongodb 数据库操作--备份 还原 导出 导入(转)

    mongodb 数据库操作--备份 还原 导出 导入   -------------------MongoDB数据导入与导出------------------- 1.导出工具:mongoexport ...

  7. mongodb 备份、还原、导入、导出

    mongodump备份数据库 常用的备份命令格式 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果想导出所有数据库,可以去掉-d - ...

  8. 5.非关系数据库(Nosql)它mongodb:创建一个集合,导出和导入备份, 数据恢复,进出口

     1 固定集合 固定集合值得是事先创建并且大小固定的集合 2 固定集合的特征:固定集合非常像环形队列.假设空间不足,最早文档就会被删除,为新的文档腾出空间.一般来说.固定集合适用于不论什么想要自己 ...

  9. 浅谈hbase表中数据导出导入(也就是备份)

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=23916356&id=3321832 最近因为生产环境hbase ...

随机推荐

  1. 【科技】单 $\log$ 合并两棵有交集 FHQ-Treap 的方法

    维护可分裂 & 合并的可重集 考虑这样一个问题: 维护 \(n\) 个 可重集 \(S_1, S_2, \cdots, S_n\),元素值域为 \([1, U]\),初始集合为空.支持一下操作 ...

  2. Android Studio中SVN的使用

    1.忽略文件 1)这种方式,每次新建一个项目都要添加,并不是全局的. .idea文件夹 .gradle文件夹 所有的build文件夹 所有的.iml文件 local.properties文件 2)使用 ...

  3. Git:git常用命令

    1.版本控制工具     一个可以管理和追踪软件代码的工具.     分类:       集中式版本控制工具:SVN       分布式版本控制工具:Git 2.Git 的概念:     工作区:就是 ...

  4. css3动画帧

    动画帧实现: css3使用steps来实现逐帧动画,动画过程中可能出现抖动,实乃精度偏差问题. 通常在动画里用到百分比单位时会出现抖动或位移现象,解决方法就是转换成具体的rem或px长度单位. 动画一 ...

  5. vs2015常用快捷键大全

    1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键"Ctrl + -"; 2)前进到下一个光标位置:"Ctrl + Shift + - &q ...

  6. ASP.NET Core静态文件中间件[1]: 搭建文件服务器

    虽然ASP.NET Core是一款"动态"的Web服务端框架,但是由它接收并处理的大部分是针对静态文件的请求,最常见的是开发Web站点使用的3种静态文件(JavaScript脚本. ...

  7. JavaSE03-运算符&分支语句

    1.运算符 1.1 算术运算符 1.1.1 运算符和表达式 运算符:对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符连接的表达式 ...

  8. Navicat12白嫖安装

    读书人怎么能算白嫖呢 搬运链接https://my.oschina.net/ZL520/blog/3070953 链接:https://pan.baidu.com/s/1jNBO9EzTzhalMgm ...

  9. WindowsPhone8中LongListSelector的扩展解决其不能绑定SelectdeItem的问题

    微软在Wp8中集成了LongListSelector, 但是该控件在ViewModel中不能实现的SelectdeItem双向绑定,因为其不是DependencyProperty没办法只能实现扩展! ...

  10. DataGrid 字体垂直居中

    如果用DataGridTextColumn作为DataGrid的列,字体垂直居中需要这样设置: <Style x:Key="Body_Content_DataGrid_Centerin ...