nodejs操作数据库
- 数据库操作
- 名词: crud
- MySQL
- mySQL的安装配置
- 在Nodejs中使用mySQL
- MongoDB
- 下载与安装
- 配置数据库(V3.6如果不是请忽略这部分配置)
- 命令行操作
- 连接数据库
- 常用命令(命令行)
- 数据库操作(Database)
- 集合操作(Collection)
- 文档操作(Document)
- 查询条件
- 筛选
- NodeJS中使用mongodb
- 安装mongodb模块
- 数据库操作
- 集合操作
- 文档操作
- MongoDB的导入导出
- MongoDB备份与恢复
数据库操作
名词: crud
CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中DataBase或者持久层的基本操作功能。
MySQL
关系型数据库
mySQL的安装配置
请自行查找相关资料
在Nodejs中使用mySQL
- 安装mysql模块
npm install mysql
- 连接数据库
- 使用连接对象方式
var mysql = require('mysql');
//创建连接对象,并配置参数
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'nfq123456',
database : 'udata'
});
// 连接数据库
connection.connect();
// 查询数据库
connection.query('select * from user', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results);
});
// 关闭连接,释放资源
connection.end();
- 使用连接池方式(官方是推荐)
使用连接池,默认会在连接池中创建10个连接对象(connectionLimit),使用完成自动放回连接池,不需要手动关闭
var mysql = require('mysql');
//创建连接池
var pool = mysql.createPool({
host : 'localhost',
user : 'root',
password : 'nfq123456',
database: 'udata',
multipleStatements: true
});
pool.query('select * from user', function(error, rows){
console.log(rows);
});
- 封装模块
// 配置参数
// ...
module.exports = {
query: sql=>{
return new Promise((resolve,reject)=>{
pool.query(sql, function(err, rows){
if(err) return reject(err);
resolve(rows);
});
})
}
}
- 数据库操作:
query(sql,callback)
- 增
insert into <表名> [(<字段名1>[,..<字段名n > ])] values ( 值1 )[, (值n )];
insert into MyGuests (firstname, lastname, email) values ('John', 'Doe', 'john@example.com');
- 删
delete from <表名> where <条件>
--删除MyGuests表中id为1的数据
DELETE FROM MyGuests where id=1;
--删除所有数据
DELETE FROM MyGuests
- 改
update <表名> set 字段=新值,… where 条件
update MyGuests set name='Mary' where id=1;
- 查
select <字段1, 字段2, ...> from <表名> where <表达式>
--查看表 MyGuests 中所有数据
select * from MyGuests;
--查看表 MyGuests 中前10行数据:
select * from MyGuests order by id limit 0,10;
- 条件控制语句: WHERE
SELECT * FROM tb_name WHERE id=3;
- 相关条件控制符:
- =、>、<、<>、IN(1,2,3…)、BETWEEN a AND b
- AND、OR、NOT
- LIKE用法中
- % 匹配任意、
- _ 匹配一个字符(可以是汉字)
- LIMIT idx,qty:数量控制
- SELECT * FROM goods LIMIT 2,5
- IS NULL 空值检测
- 排序ORDER BY
- asc 升序(默认)
- desc 降序
MongoDB
MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式
bson:是一种类json的一种二进制形式的存储格式,简称Binary JSON
下载与安装
- 下载地址:https://www.mongodb.com/download-center/community
- 安装路径尽量简单,不要有中文
配置数据库(V3.6如果不是请忽略这部分配置)
- 配置环境变量
安装mongodb默认自动配置环境变量,方便在命令行中使用相关命令
- 配置数据库保存目录
mongod.exe --dbpath D:\data\mongodb\db
启动成功后,可通过 http://127.0.0.1:27017 访问,但关闭后每次访问都必须重复以上操作
- 配置为 windows 服务,实现开机自动启动Mongodb
- 创建mongod.cfg文件,并写入以下内容
systemLog:
destination: file
path: d:\data\mongodb\log\mongod.log
storage:
dbPath: d:\data\mongodb\db
- 执行以下命令,安装windows服务
mongod.exe --config c:\mongodb\mongod.cfg --service --serviceName MongoDB --install
PS: MongoDB4.0后默认安装windows服务
命令行操作
连接数据库
- mongo 连接到数据库并进行操作
- mongod 显示数据库信息
常用命令(命令行)
输入help可以看到基本操作命令
数据库操作(Database)
- 查看所有数据库:
show dbs
- 创建/切换数据库:
use DBNAME
如果数据库不存在,则创建数据库,否则切换数据库。
- 查看当前使用的数据库:
db
- 显示当前db状态:
db.stats()
- 查看当前db的链接地址:
db.getMongo()
- 删除当前使用数据库:
db.dropDatabase()
集合操作(Collection)
利用use DBNAME 切换到当前数据库后,可以进行集合与文档的操作
- 创建集合:
-
db.createCollection(NAME)
;
PS:只有创建了集合,数据库才能真正成功创建
- 查询所有集合:
show collections
- 删除集合:
db.NAME.drop();
文档操作(Document)
文档就是数据,这里的所有操作都是针对数据,格式:db.NAME.方法()
- 增(插入数据):
- insertOne(document)
- insertMany([document,…])
db.user.insertOne({username:'fqniu'});
db.user.insertMany([{"username": 'fqniu'}, {'username': '小牛牛'}]);
当你插入一些文档时,MongoDB 会自动创建集合NAME
- 删(删除数据)
- deleteOne(query)
- deleteMany(query)
- 改(更新数据)
- updateOne(query,newData)
- updateMany(query,newData)
- save(document)
//更新指定字段
//查找name属性为fqniu的数据,并更新age属性为25
db.user.updateOne({name:'fqniu'},{$set:{age:25}})
// 找到所有年龄大于18的数据,并设置description为成年
db.user.updateMany( { age: { $gt : 18 } } , { $set : { description : "成年"} } );
- 查(查询数据):
- 查询所有:
db.NAME.find()
- 按条件查询(支持多条件):
db.NAME.find(query)
- 查询第一条(只获取第一条):
db.NAME.findOne(query)
find()方法一般后一般使用toArray()方法把结果转成数组
//查询user下所有数据
db.user.find().toArray((err,result)=>{});
// 查询user下年龄为38的
db.user.find({age:38}).toArray()
// 查询user下年龄大于38的
db.user.find({age:{$gt:38}}).toArray()
//利用pretty()方法格式化结果
db.user.find().toArray().pretty();
查询条件
- 比较查询
- 大于:
$gt
- 小于:
$lt
- 大于等于:
$gte
- 小于等于:
$lte
- 非等于:
$ne
- 包含/不包含:
$in / $nin
db.goods.find({id:{$in:[10,18,26,13]}})
或者
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
- 或:$or
db.user.find({$or:[{name:'fqniu'},{name:'牛牛'}]})
db.user.find({$or:[{age:{$gt:18}},{description:"成年"}]})
- 匹配所有:$all
- 判断文档属性是否存在:$exists
db.user.find({password:{$exists:true}}) //查找属性password存在的用户
db.user.find({password:{$exists:false}}) //查找属性password不存在的数据
db.user.find({age:{$in:[null],$exists:true}}) //查找age属性存在但值为null的数据
- 正则表达式
db.user.find({"name":/jack/i});//查找name属性包含jack的数据(不区分大小写)
筛选
- 限制数量:
db.表名.find().limit(数量);
- 跳过指定数量:
db.表名.find().skip(数量)
- 排序:
sort({key:1})
- 1 : 升序
- -1 : 降序
三个放在一起使用的时候,执行的顺序是先 sort(), 然后是 skip(),最后是 limit()
// 把类型为字String的价格按数字排序
db.goods.find().collation({numericOrdering:true}).sort({price:1})
// 根据某个值修改文档中的另一个值(把price的值改成sale_price的8折)
db.goods.find({price:0}).forEach(item=>{
db.goods.updateOne({_id:item._id},{$set:{price: item.sale_price*0.8}})
})
NodeJS中使用mongodb
安装mongodb模块
npm install mongodb --save
数据库操作
- 连接mongoDB
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
//连接mongoDB
MongoClient.connect("mongodb://localhost:27017", function(err, client) {
if(err) throw err;
// 连接数据库,无则自动创建
let db = client.db('userlist');
});
集合操作
- 创建集合:createCollection()
格式:db.createCollection(name, options)
- 使用集合collection()
db.collection(name)
- 删除集合:drop()
格式:db.COLLECTION_NAME.drop(callback)
db.createCollection('site', function (err, res) {
if (err) throw err;
console.log("创建集合!");
db.close();
});
文档操作
同上命令行操作 <文档操作(Document)>
MongoDB的导入导出
- 导出mongoexport
把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据
- 格式:
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
- 参数说明:
- -d :数据库名
- -c :collection名
- -o :输出的文件名
- –type : 输出的格式,默认为json
- -f :输出的字段,如果-type为csv,则需要加上-f “字段名”
mongoexport -d mytest -c goods -o D:/data/goods.json --type json -f "_id,name,price,img_url,add_time"
- 导入mongoimport
- 格式:
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
- 参数说明:
- -d :数据库名
- -c :collection名
- –type :导入的格式默认json
- -f :导入的字段名
- –headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
- –file :要导入的文件
mongoimport -d mongotest -c goods --file D:/data/goods.json --type json
MongoDB备份与恢复
- 备份
- 格式:
mongodump -h dbhost -d dbname -o dbdirectory
- 参数说明:
- -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
- -d: 需要备份的数据库实例,例如:test
- -o: 备份的数据存放位置,例如:D:/mongodump/
当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。
mongodump -h 127.0.0.1:27017 -d mytest -o D:/mongodump/
- 恢复
- 格式:
mongorestore -h dbhost -d dbname --dir dbdirectory
- 参数或名:
- -h: MongoDB所在服务器地址
- -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
- –dir: 备份数据所在位置,例如:D:/mongodump/
- –drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!
mongorestore -h 192.168.17.129:27017 -d mytest --dir D:/mongodump/
数据库导出
数据库导入
注意数据库的导入导出的环境不能在mongo里面,需要退出,看我cmd的命令行就知道。