
在实际业务开发中,我们常常需要将结构化数据库(如 MySQL)中的数据迁移到非结构化或半结构化数据库(如 MongoDB)中。无论是为了异构数据分析、架构调整,还是系统升级,手动迁移数据既低效又容易出错。
本文将通过一个基于 Node.js 编写的自动化数据迁移工具,展示如何高效实现 MySQL 到 MongoDB 的数据迁移,并支持灵活的字段映射配置。


我们需要一个能够自动化批量迁移 MySQL 表数据到 MongoDB的工具,具备以下特点:
技术 | 用途 |
|---|---|
Node.js | 脚本运行环境 |
| 连接与查询 MySQL 数据库 |
| 操作 MongoDB 的 ODM 工具 |
| 加载环境配置 |
| 加载字段映射规则 |
data-migrator/
├── config/
│ └── mapping.yaml # 字段映射配置
├── .env # 环境变量配置
├── migrate.js # 主迁移脚本
├── mysql.js # MySQL 查询工具
├── mongo.js # MongoDB 插入工具
└── utils.js # 工具函数MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=123456
MYSQL_DATABASE=testdb
MONGO_URI=mongodb://localhost:27017/testdb支持多表配置及字段重命名:
users:
collection: users
fields:
id: _id
username: name
email: email
created_at: createdAt
orders:
collection: orders
fields:
id: _id
user_id: userId
amount: totalAmount
created_at: createdAtconst mysql = require('mysql2/promise');
require('dotenv').config();
const pool = mysql.createPool({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
});
async function fetchTableData(table) {
const [rows] = await pool.query(`SELECT * FROM \`${table}\``);
return rows;
}
module.exports = { fetchTableData };const mongoose = require('mongoose');
require('dotenv').config();
mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
async function insertMany(collectionName, docs) {
const Model = mongoose.model(collectionName, new mongoose.Schema({}, { strict: false }), collectionName);
await Model.insertMany(docs);
}
module.exports = { insertMany };
字段映射处理逻辑:
function transformRow(row, fieldMap) {
const newRow = {};
for (const [source, target] of Object.entries(fieldMap)) {
newRow[target] = row[source];
}
return newRow;
}
module.exports = { transformRow };const fs = require('fs');
const yaml = require('js-yaml');
const { fetchTableData } = require('./mysql');
const { insertMany } = require('./mongo');
const { transformRow } = require('./utils');
// 加载字段映射配置
const mappings = yaml.load(fs.readFileSync('./config/mapping.yaml', 'utf8'));
async function migrate() {
for (const [table, config] of Object.entries(mappings)) {
console.log(`📥 开始迁移表: ${table}`);
const rows = await fetchTableData(table);
const transformed = rows.map(row => transformRow(row, config.fields));
await insertMany(config.collection, transformed);
console.log(`✅ 已迁移 ${rows.length} 条记录到 ${config.collection}`);
}
console.log('🎉 所有迁移任务完成!');
process.exit(0);
}
migrate().catch(err => {
console.error('❌ 迁移失败:', err);
process.exit(1);
});node migrate.js,即可根据 mapping.yaml 配置批量迁移指定表。本文实现了一个轻量级、可扩展的 Node.js 自动化数据迁移工具,通过配置 MySQL 与 MongoDB 的连接参数和字段映射表,成功完成多个表的结构化数据向文档型数据库的转换。适用于数据备份、数据仓库构建、业务迁移等实际场景。
这类自动化脚本对于提升开发效率、降低人为错误、增强系统弹性具有重要意义。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。