如果你需要做MongoDB的表结构迁移(只迁结构,不移数据),这些脚本能帮上大忙。
迁移Collection结构
在源DB运行以下脚本,会生成自动创建空Collection的脚本,把生成的脚本在目标DB运行即可。
db.getCollectionNames().forEach(function (col) {
var runCommandStr = "";
runCommandStr = "db.createCollection('" + col + "');"
print(runCommandStr);
});
迁移索引
在源DB运行以下脚本,会生成自动创建索引的脚本,把生成的脚本在目标DB运行即可。
db.getCollectionNames().forEach(function (col) {
if (!db[col]) return;
var indexes = db[col].getIndexes();
indexes.forEach(function (c) {
var fields = '', result = '', options1 = {};
for (var i in c) {
if (i == 'key') {
fields = c[i];
} else if (i == 'name' && c[i] == '_id_') {
return;
} else if (i != 'name' && i != 'v' && i != 'ns') {
options1[i] = c[i];
}
}
var fields = JSON.stringify(fields);
var options = JSON.stringify(options1);
if (options == '{}') {
result = "db." + col + ".createIndex(" + fields + "); ";
} else {
result = "db." + col + ".createIndex(" + fields + ", " + options + "); ";
}
result = result
.replace(/{"floatApprox":-1,"top":-1,"bottom":-1}/ig, '-1')
.replace(/{"floatApprox":(-?\d+)}/ig, '$1')
.replace(/\{"\$numberLong":"(-?\d+)"\}/ig, '$1');
print(result);
});
});
(正文完)