Nodejs之路(四)—— MongoDB&MySQL
一、MongoDB
1.1概述
-
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
-
关系型数据库和非关系型数据库
-
关系型数据库:表与表之间存在关系
-
所有的关系型数据可以都需要通过
sql
语言来操作 -
所有的关系型数据库在操作之前都需要设计表结构
-
所有关系型数据库支持约束:
-
唯一的
-
主键
-
默认值
-
非空
-
-
-
非关系型数据库
-
有的非关系型数据库就是
key-value
对儿,没有表 -
MongoDB是长得最像关系型数据库的非关系型数据库
-
数据库->数据库
-
数据表->集合(数组)
-
表记录->文档对象
-
-
MongoDB不需要设计表结构,也就是说可以任意往里面存储数据,没有结构性这么一说
-
-
-
MongoDB数据库的基本概念
-
数据库——mongodb下可以有多个数据库
-
集合——一个数据库可以有多个集合(相当于MySQL中的表)
-
文档——一个集合可以有多个文档(相当于MySQL中的表记录)
-
{ //数据库 qq:{ //集合 users:[ //文档 {name:"张三",age:15}, {name:"李四",age:16}, {name:"王麻子",age:17}, {name:"刘老五",age:18}, {name:"赵老六",age:19} ...... ], products:[ ] ...... }, taobao:{ }, baidu:{ } ...... }
-
- 文档结构很灵活,没有任何限制
-
MongoDB非常灵活,不需要像MySQL一样先创建数据库、表、设计表结构。当你需要插入数据的时候,只需要指定往哪个数据库的哪个集合操作就可以了。一切都由MongoDB来帮你自动完成建库建集合这件事儿
1.2安装
64位下载地址:https://www.mongodb.com/download-center/community
注意:
-
记得要配置环境变量
-
输入
mongod --version
测试是否安装成功
1.3启动和关闭mongodb 数据库
-
启动:
mongod --dbpath = 数据存储目录路径
-
MongoDB将数据目录存储在 db 目录下,但是这个数据目录不会主动创建。我们第一次启动mongodb时,需要手动在根目录下创建
data\db
这个目录。这里要注意,数据目录应该放在根目录下(如:C:\
或者D:\
等, 比如我的是放在C:\data\db
下) -
第一次启动mongodb时,执行命令:
mongod --dbpath "C:\data\db"
,后面再启动mongodb时,直接执行命令:mongod
即可 -
mongod --dbpath 命令是创建数据库文件的存放位置,第一次启动mongodb服务时需要先确定数据库文件存放的位置,否则系统不会自动创建,启动会不成功。
-
- 停止:
在开启服务的控制台,直接Ctrl+C即可停止 或者直接关闭开启服务的控制台也可以
1.4连接和退出mongodb数据库
连接:
#该命令默认连接本机的 MongoDB 服务
mongo
退出:
#在连接状态输入 exit 退出连接
exit
1.5基本命令
-
show dbs
:查看显示所欲数据库 -
db
:查看当前操作的数据库 -
use 数据库名称
1.6在Node中如何操作MongoDB数据库
1.6.1使用官方的MongoDB
下载地址:https://github.com/mongodb/node-mongodb-native
1.6.2使用第三方mongoose来操作MongoDB数据库
第三方包mongoose
:基于MongoDB官方的mongodb
包再一次做了封装
官方指南:https://mongoosejs.com/docs/guides.html
官方API文档:https://mongoosejs.com/docs/api.html
-
-
安装:
npm i mongoose
-
实例demo:
// 官方参考模板 const mongoose = require('mongoose'); // 连接 MongoDB数据库 mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true}); // 创建一个模型,就是在设计数据库 // MongoDB是动态的,非常灵活,只需要在代码中设计数据库就可以了 // mongoose这个包就可以让你的设计编写过程变得非常的简单 const Cat = mongoose.model('Cat', { name: String });//虽然这里的Cat是大写,但是会生成小写的 cats 集合名称 //实例化一个Cat const kitty = new Cat({ name: 'Zildjian' }); // 持久化保存 Kitty 实例 kitty.save().then(() => console.log('meow'));
-
-
-
设计 Schema 发布 Model
var mongoose = require('mongoose') var Schema = mongoose.Schema // 1.连接数据库 // 指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来 mongoose.connect('mongodb://localhost/test') // 2.设计集合结构(表结构) // 字段名称就是表结构中的属性名称 // 约束的目的是为了保证数据的完整性,不要有脏数据 var userSchema = new Schema({ username:{ type:String, required:true //表示username必须要有 }, password:{ type:String, required:true }, email:{ type:String } }); //3.将集合结构发布为模型 // mongoose.model 方法就是用来将一个架构发布为一个 model // 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称 // mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称。例如这里的 User 最终会变成 users 集合名称 // 第二个参数:架构 Schema // 返回值:模型构造函数 var User = mongoose.model('User', userSchema) // 4.当有了模型构造函数之后,就可以使用这个构造函数对 users 集合中的数据为所欲为了(增删改查)
-
增加数据
var admin = new User({ username:"admin", password:"123456", email:"admin@admin.com" }) admin.save(function(err,ret){ if(err){ console.log("保存失败") }else{ console.log("保存成功") console.log(ret) } })
-
查询
-
查询所有
User.find(function(err,ret){ if(err){ console.log("查询失败") }else{ console.log(ret) } })
-
按条件查询所有
User.find({ username:"zs" //这就是条件 },function(err,ret){ if(err){ console.log("查询失败") }else{ console.log(ret) } })
-
按条件查询单个
User.findOne({ username:"zs" //这就是条件 },function(err,ret){ if(err){ console.log("查询失败") }else{ console.log(ret) } })
-
-
删除数据
-
删除所有符合条件的数据
User.remove({ username:"zs" },function(err,ret){ if(err){ console.log("删除失败") }else{ console.log("删除成功") console.log(ret) } })
-
删除符合条件的第一条数据
User.deleteOne({ username:"admin" }, function (err) { if (err){ return handleError(err) } // deleted at most one User document })
或
User.findOneAndRemove(conditions,[options],[callback])
-
根据id删除一条数据
User.findByIdAndRemove(id,[options],[callback])
-
-
更新数据
-
根据条件更新所有
User.update(conditions,doc,[options],[callback])
-
根据指定条件跟新一个
User.findOneAndUpdate([conditions],[update],[options],[callback])
-
根据id更新一个
User.findByIdAndUpdate('5d32fa6bac0b39270c256225',{ password:"123" },function(err,ret){ if(err){ console.log("更新失败") }else{ console.log("更新成功") } })
-
-
二、MySQL
1.官方参考
https://www.npmjs.com/package/mysql
2.安装
npm install mysql
3.参考demo
var mysql = require('mysql'); // 1.创建连接 var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '123', database : 'students' }); // 2.连接数据库 connection.connect(); // 3.执行数据操作 connection.query('SELECT * FROM `users`', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results); }); // ---------所有的增删改查都在query方法里面操作-------------------------------------- // -------------增加数据------------------------- // connection.query('INSERT INTO users VALUES(null,"admin","123456")', function (error, results, fields) { // if (error) throw error; // console.log('The solution is: ', results); // }); // 4.关闭连接 connection.end();
注意:
- 要提前安装好MySQL,并且打开MySQL服务
- 对于MySQL,创建连接的数据库的表和字段需要提前设置好