Node.js实现MongoDB到MySQL的数据同步方案

作者:小算盘

时间:2026-10-22

浏览:266

本文介绍使用Node.js将MongoDB数据同步至MySQL数据库的具体实现。通过配置数据库连接池,利用Mongoose查询MongoDB用户数据,并遍历结果集使用MySQL驱动批量插入记录。文章提供了关键代码示例及环境准备说明,适用于需要跨数据库进行数据交互的Node.js后端开发场景。

文章目录

Node.js实现MongoDB到MySQL的数据同步方案

前言

近期因业务需求,APP端后台需将MongoDB中的数据同步至Java端后台的MySQL中,随后再将MySQL计算后的数据回同步至MongoDB数据库。

该过程看似繁琐,实则涉及两个数据库之间的双向数据写入操作。

下文将详细阐述使用Node.js将MongoDB数据批量插入到MySQL数据库的实现流程。

开发环境

环境

  • Node.js
  • MongoDB
  • MySQL
  • npm

依赖模块

所需模块

  • Mongoose
  • MySQL驱动

数据准备

准备MongoDB数据

  • 以同步用户表为例,该表包含username、email、password等字段。
  • 可通过MongoDB Shell命令插入1000条测试数据。

代码实现

实现步骤

此处省略Mongoose Schema的定义,读者可参考官方文档。Node.js连接MongoDB及MySQL连接池的配置参考如下:

Node.js连接MongoDB参考:https://www.jb51.net/article/98813.htm

Node.js MySQL连接池使用实例:

MySQL模块采用felixge/node-mysql。

源码如下:


/**
* Created by kevalin on 2015/4/22.
*/
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var conf = require('../config/dbconnection');
//定义pool池
var pool = mysql.createPool(
{
host : conf.dbMysql.host,
user : conf.dbMysql.user,
password : conf.dbMysql.password,
database : conf.dbMysql.database,
port : conf.dbMysql.port
}
);
router.get('/', function(req, res) {
var selectSites = "select *, date_format(do_time, '%Y-%m-%d %H:%i:%s') as time from siteinfo order by id";
pool.getConnection(function(err, connection) {
if (err) throw err;
connection.query(selectSites, function(err, rows) {
if (err) throw err;
res.render('sites', {title : '站点分布', results : rows});
//回收pool
connection.release();
});
});
});
module.exports = router;

以下是关键实现代码

核心思路:

首先从MongoDB查询数据,随后遍历查询结果并将每条数据插入MySQL。


User.find({}, (err, user) => {
 if (err)
 res.send(err);
 for( let i = 0 ; i < family.length ; i ++ ) { 
 console.log("第" + (i + 1) + "条数据");
 let username = user[i].username; 
 let email = user[i].email;
 let password = user[i].password; 
 let sql = "insert into user_table(username, email, password) values ('" + username + "','" + email + "','" + password + "');";
 pool.query(sql,(err, rows) => {
  if (err)
  res.send(err); 

  res.json({
  message:'数据插入成功',
  rows
  });  
 });
 }
});

总结

以上为本文全部内容,希望本文内容对您的学习或工作具有参考价值。如有疑问欢迎留言交流,感谢支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章