10_Node js 鏈接 MySQL 與 MongoDB

本篇文章講解了 Node.js 鏈接 MySQL 與 MongoDB,並實現基本的增刪改查功能。node

這裏對安裝 MySQL 與 MongoDB 等軟件工具不作講解。mysql

1、MySQL

一、設計表

首先經過可視化工具進行表的設計,而後添加幾條測試數據:sql

i

二、安裝 Node.js 鏈接 MySQL 的包

npm i mysql -d
複製代碼

三、鏈接 MySQL

MySQL.jsmongodb

// 引入 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,鏈接成功界面以下:數據庫

接下來就該實現增刪改查的功能了。npm

四、數據庫操做:增刪改查

4.一、增

add.jsbash

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.二、刪

delete.jsui

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.三、改

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.四、查

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

2、MongoDB

一、安裝 mongodb 包

npm install mongodb --save

二、建立數據庫

要在 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();
});
複製代碼

三、建立集合

咱們可使用 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 了。

四、數據庫操做:增刪改查

與 MySQL 不一樣的是 MongoDB 會自動建立數據庫和集合,因此使用前咱們不須要手動去建立。

4.一、增

  • 插入一條數據: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.二、刪

  • 刪除一條數據: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.三、改

  • 修改一條數據: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.四、查

可使用 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.五、排序

使用 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.六、查詢分頁

若是要設置指定的返回條數可使用 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.七、鏈接操做

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.八、刪除集合

咱們可使用 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();
    });
});
複製代碼

期待您的關注!

相關文章
相關標籤/搜索