10_Node js 连接 MySQL 与 MongoDB

3,722 阅读6分钟

本篇文章讲解了 Node.js 连接 MySQL 与 MongoDB,并实现基本的增删改查功能。

这里对安装 MySQL 与 MongoDB 等软件工具不做讲解。

一、MySQL

1、设计表

首先通过可视化工具进行表的设计,然后添加几条测试数据:

i

2、安装 Node.js 连接 MySQL 的包

npm i mysql -d

3、连接 MySQL

MySQL.js

// 引入 mysql 包
const mysql = require('mysql');
// mysql 连接信息
let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'test',
    port: 3306
});
// 开始链接
connection.connect();

// 查询 info_test 表
connection.query('SELECT * FROM info_test', (error, results, fields) => {
    if (error) throw error;
    console.log(results);
});
// 终止连接
connection.end();

执行 node MySQL.js,连接成功界面如下:

接下来就该实现增删改查的功能了。

4、数据库操作:增删改查

4.1、增

add.js

const mysql = require('mysql');
let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'test',
    port: 3306
});
connection.connect();

// 设置 SQL 插入语句
let addSql = 'INSERT INTO info_test(id,name,age) VALUES(0,?,?)';
// 插入数据
let addSqlParams = ['zhao', '18'];
// 链接 SQL 并实施语句
connection.query(addSql, addSqlParams, (error, response) => {
    if (error) {
        console.log("新增失败!");
        console.log(error);
        return;
    } else {
        console.log("新增成功!");
        console.log(response);
    };
});
connection.end();

执行 node add.js

刷新 Navicat,会看到新添加了一条数据。

4.2、删

delete.js

const mysql = require('mysql');
let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'test',
    port: 3306
});
connection.connect();

// 设置 SQL 删除语句
let delSql = 'DELETE FROM info_test where id=0';
connection.query(delSql, (error, response) => {
    if (error) {
        console.log("删除失败!");
        console.log(error);
        return;
    } else {
        console.log("删除成功!");
        console.log(response);
    };
});
connection.end();

执行 node delete.js

刷新 Navicat,会看到 id 为 0 的那条数据被删除了。

4.3、改

update.js

const mysql = require('mysql');
let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'test',
    port: 3306
});
connection.connect();

// 设置 SQL 修改语句
let updateSql = 'UPDATE info_test SET name = ?,age = ? WHERE ID = ?';
// 要修改的数据
let updateSqlParams = ['Wang', '18', 1];
connection.query(updateSql, updateSqlParams, (error, response) => {
    if (error) {
        console.log("删除失败!");
        console.log(error);
        return;
    } else {
        console.log("删除成功!");
        console.log(response);
    };
});
connection.end();

执行 node update.js

刷新 Navicat,会看到 id 为 1 的那条数据被修改了。

4.4、查

read.js

const mysql = require('mysql');
let connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: 'test',
    port: 3306
});
connection.connect();

// 设置 SQL 修改语句
let readSql = 'SELECT * FROM info_test';
connection.query(readSql, (error, response) => {
    if (error) {
        console.log("查询失败!");
        console.log(error);
        return;
    } else {
        console.log("查询成功!");
        console.log(response);
    };
});
connection.end();

执行 node read.js

二、MongoDB

1、安装 mongodb 包

npm install mongodb --save

2、创建数据库

要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。

如果数据库不存在,MongoDB 将创建数据库并建立连接,例如我们创建一个 test 数据库:

MongoDB.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    console.log("数据库已创建!");
    db.close();
});

3、创建集合

我们可以使用 createCollection() 方法来创建集合:

修改 MongoDB.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    console.log('数据库已创建');
    var dbase = db.db("test");
    dbase.createCollection('info_test', function (err, res) {
        if (err) throw err;
        console.log("创建集合 info_test!");
        db.close();
    });
});

如果你有 MongoDB 的可视化工具,例如:Studio 3T,那么你就可以看到刚刚创建的数据库 test 和 集合(表) info_test 了。

4、数据库操作:增删改查

与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。

4.1、增

  • 插入一条数据:insertOne();
  • 插入多条数据:insertMany()。

以下实例我们连接数据库 test 的 info_test 表,并插入一条数据,使用 insertOne():

add.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    var user = {
        name: "Liu",
        age: "24"
    };
    dbo.collection("info_test").insertOne(user, function(err, res) {
        if (err) throw err;
        console.log("数据插入成功!");
        db.close();
    });
});

如果没有安装可视化工具,我们也可以打开 MongoDB 的客户端查看数据,如:

接下来我们使用 insertMany() 来插入多条数据。

add.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    var user = [{
        name: "Zhao",
        age: "25"
    }, {
        name: "Sun",
        age: "18"
    }, {
        name: "Du",
        age: "23"
    }];
    dbo.collection("info_test").insertMany(user, function(err, res) {
        if (err) throw err;
        console.log("插入" + res.insertedCount + "条数据成功!");
        db.close();
    });
});

4.2、删

  • 删除一条数据:deleteOne();
  • 删除多条数据:deleteMany()。

将 name 为 "Sun" 的数据删除:

delete.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    // 查询条件
    var whereStr = {
        "name": "Sun"
    };
    dbo.collection("info_test").deleteOne(whereStr, function(err, res) {
        if (err) throw err;
        console.log("数据删除成功!");
        db.close();
    });
});

将 age 为 23 的数据都删除:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    // 查询条件
    var whereStr = {
        age: "23"
    };
    dbo.collection("info_test").deleteMany(whereStr, function(err, res) {
        if (err) throw err;
        console.log(res.result.n + " 条文档被删除");
        db.close();
    });
});

4.3、改

  • 修改一条数据:updateOne();
  • 修改多条数据:updateMany()。

将 name 为 Liu 的 age 值改为 18:

update.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    // 查询条件
    var whereStr = {
        "name": "Liu"
    };
    // 修改为:
    var updateStr = {
        $set: {
            "age": "18"
        }
    };
    dbo.collection("info_test").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("数据修改成功!");
        db.close();
    });
});

修改多条数据,将 age 为 18 的数据 name 值改为 Wang:

update.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    // 查询条件
    var whereStr = {
        "age": "18"
    };
    // 修改为:
    var updateStr = {
        $set: {
            "name": "Wang"
        }
    };
    dbo.collection("info_test").updateMany(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log(res.result.nModified + "条数据修改成功!");
        db.close();
    });
});

4.4、查

可以使用 find() 来查找数据, find() 可以返回匹配条件的所有数据,如果未指定条件,find() 返回集合中的所有数据。

read.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    // 查询所有数据
    dbo.collection("info_test").find({}).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

带条件查询,查询所有 age 为 18 的数据:

update.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    // 查询条件
    var whereStr = {
        "age": "18"
    }
    dbo.collection("info_test").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

4.5、排序

使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。

例如按照 age 值从小到大排序:

sort.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    // 排序条件
    var mySort = {
        "age": 1
    }
    dbo.collection("info_test").find().sort(mySort).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

4.6、查询分页

如果要设置指定的返回条数可以使用 limit() 方法,该方法只接受一个参数,指定了返回的条数。

先来看一下 info_test 表中数据情况:

limit.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    dbo.collection("info_test").find().limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

如果要指定跳过的条数,可以使用 skip() 方法。

skip.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/test";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    dbo.collection("info_test").find().skip(2).limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

4.7、连接操作

mongoDB 不是一个关系型数据库,但我们可以使用 $lookup 来实现左连接。

例如我们有两个集合数据分别为:

集合1:orders

[
  { _id: 1, product_id: 154, status: 1 }
]

集合2:products

[
  { _id: 154, name: '笔记本电脑' },
  { _id: 155, name: '耳机' },
  { _id: 156, name: '台式电脑' }
]

$lookup 实现左连接

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    dbo.collection('orders').aggregate([{
        $lookup: {
            from: 'products', // 右集合
            localField: 'product_id', // 左集合 join 字段
            foreignField: '_id', // 右集合 join 字段
            as: 'orderdetails' // 新生成字段(类型array)
        }
    }]).toArray(function(err, res) {
        if (err) throw err;
        console.log(JSON.stringify(res));
        db.close();
    });
});

4.8、删除集合

我们可以使用 drop() 方法来删除集合:

drop.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("test");
    dbo.collection("info_test").drop(function(err, delOK) {
        if (err) throw err;
        if (delOK) console.log("集合删除成功!");
        db.close();
    });
});

期待您的关注!