k8w.io
MongoDB迁移表结构和索引的脚本
2019-05-28作者:k8w

如果你需要做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);
    });
});
(正文完)
留言(1条)
雨霖铃 说:
可以借鉴下你的代码吗
2019-10-11 14:33 | 1楼 | 回复
发表新留言
您的大名:
必填
电子邮箱:
不公开,仅用于向你发送回复
粤ICP备17160324号-3