在实际项目开发中,很多时候需要做数据迁移,针对于mongo的迁移,除了数据以外,还需要额外的迁移db的索引。
本期我们主要提供索引的导入,具体代码如下:
var db_name='dbname'
conn = new Mongo();
db = db.getSiblingDB(db_name);
joinStr = "*_*";
// 添加所有表的索引
// 前提是通过findAllIndexes函数将所有表的索引写入了当前执行路径下的all_indexes.txt文件
function addAllIndexes() {
// 获取所有索引,一行代表一张表的索引
let indexes = cat('./demo.txt');
lines = indexes.split('\n');
// 遍历所有表的索引
for (var line of lines) {
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));
// 一次只创建一个索引,防止批量创建索引过程中的错误可能导致多个索引创建失败
if (index.name == "_id_") {
continue;
}
let rs = db.runCommand(
{
createIndexes: colName,
indexes: [index]
}
);
print("operation result:", JSON.stringify(rs),"\n");
}
print("\n");
}
}
addAllIndexes();
从上可以看出来,索引的导入需要执行命令:
mongodb的安装路径/bin/mongo mongodb_IP:mongodb_PORT/mongodb_NAME -u user -p pwd ./mongo_import.js > out.txt.
其中mongo_import.js指的是上面代码的js脚本。
mongodb_IP 指的是mongo的ip地址
mongodb_PORT 指的是连接mongo的port
mongodb_NAME 指的是mongo的dbname
user 指的是登录mongo的账号
pwd 指的是登录mongo的密码
out.txt 是把执行结果输入到out.txt中。