本篇文章讲解了 Node.js 链接 MySQL 与 MongoDB,并实现基本的增删改查功能。node
这里对安装 MySQL 与 MongoDB 等软件工具不作讲解。mysql
首先经过可视化工具进行表的设计,而后添加几条测试数据:sql
npm i mysql -d
复制代码
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
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,会看到新添加了一条数据。测试
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 的那条数据被删除了。
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 的那条数据被修改了。
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
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 会自动建立数据库和集合,因此使用前咱们不须要手动去建立。
如下实例咱们链接数据库 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();
});
});
复制代码
将 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();
});
});
复制代码
将 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();
});
});
复制代码
可使用 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();
});
});
复制代码
使用 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();
});
});
复制代码
若是要设置指定的返回条数可使用 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();
});
});
复制代码
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();
});
});
复制代码
咱们可使用 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();
});
});
复制代码