MongoDB数据库
关系数据库类如mysql等
NoSql(not only sql),不仅仅是SQL
具体内容可参考网上的菜鸟教程文档
http://www.runoob.com/mongodb/mongodb-connections.html
MongoDB是关系数据库
最像关系型数据库的非关系数据库
两者对比:
数据库 --> 数据库
数据表 --> 集合(数组
表记录 --> 文档对象
不需要设计表结构,任意往里面增加数据
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
下载安装
进入官网下载,找到对应的版本,选择社区版即可
https://www.mongodb.com/
MongoDB安装-
按照教程点击next,下图complete表示完整安装,Custom表示自定义安装,可改变安装路径,但是不介意更改,除非C盘满了,此处选择后者
配置环境变量
打开默认安装目录
C:\Program Files\MongoDB\Server\4.0\bin
打开环境变量配置窗口,将以上复制的路径进行操作。在系统变量中找到path。编辑>新建>将复制的粘贴进去,点击确定就完成了。
打开控制台,输入,如果输出如下版本信息,表示安装并配置成功
启动和关闭数据库
# MongoDB默认使用执行mongod命令所处盘符根目录下的/data/db作为自己数据的存储目录
# 所以在启动之前需要自己手动创建一个/data/db用于存放
# 我安装在C盘,所以在C盘根目录下创建/data/db
# 控制台输入:
`mongod`
# 已启动数据库,不要关闭控制台
# 关闭数据库:在控制台Ctrl+C即可
连接数据库
新开一个控制台,输入,默认连接本地的MongoDB
打开之后输入,断开数据库
基本命令
查看显示所有数据库
切换到指定的数据(如果没有会新建)
查看当前操作的数据库
插入数据:调用API即可
查看数据
Node.js中操作MongoDB数据库
使用官方的包来操作
#在https://www.npmjs.com/上搜索mongodb,找到用Node.js连接的包
https://github.com/mongodb/node-mongodb-native
使用第三方来操作数据库
# 官网
https://mongoosejs.com/
# 官方API
https://mongoosejs.com/docs/models.html
使用准备
# 新建一个mongodb-demo的项目
# 初始化npm
npminit-y
# 下载mongoose
npminstallmongoose
# 将官网上的连接示例代码粘贴到demo1.js中
// 加载,默认的:
constmongoose=require('mongoose');
// 连接mongoDB数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser:true});
// 创建一个模型,就是在设计数据库
// MongoDB是动态的,非常灵活,只要在代码中设计数据库就行了
// mongoose这个包就可以让你的设计编写过程非常简单
// Cat表名,第二个参数为数据结构,文档中有name
constCat=mongoose.model('Cat', {name:String});
// 创建实例化一个对象Cat
constkitty=newCat({name:'Zildjian'});
// 持久化保存实例
kitty.save().then(()=>console.log('meow'));
4.1 创建一个自己的数据库
varmongoose=require('mongoose')
// 获取模式架构
varSchema=mongoose.Schema
// 1. 连接数据库,不存在会自动创建
mongoose.connect('mongodb://localhost/itcast')
// 2. 通过代码设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 比如设计一个用户表
varuserSchema=newSchema({
username: {
type:String,
required:true// 要求用户名必须有
},
password: {
type:String,
required:true
},
email: {
type:String
}
});
// 3. 将模板结构发布为模型
// 该方法为将架构发表为模型的方法
// 第一个参数,传入一个大写名词来表示数据库名称,mongoose会自动变成小写复数集合名称,此处会变为users
// 第二个参数架构Schema
// 返回值:模型构造函数
varUser=mongoose.model('User',userSchema);
4.2 插入数据
// 4.1 插入一个用户
// 写入数据
varadmin=newUser({
username:'admin',
password:'admin',
email:'admin@.admin.com'
})
// 持久化保存实例
admin.save(function(err,ret) {
if(err) {
console.log('保存失败')
}else{
console.log('保存成功')
console.log(ret);
}
})
4.3 查询数据
4.3.1 查询所有数据
// 4.2 查询所有数据
User.find(function(err,ret) {
if(err) {
console.log('查询失败')
}else{
console.log(ret)
}
})
4.3.2 按照条件查询
User.find({
username:'袁素丹'// 此处存放条件
},function(err,ret) {
if(err) {
console.log('查询失败')
}else{
console.log(ret)
}
})
// 只查询第一个出现的
User.findOne({
username:'袁素丹'// 此处存放条件
},function(err,ret) {
if(err) {
console.log('查询失败')
}else{
console.log(ret)
}
})
4.4 更新数据
// 第一个参数为更新的id,第二个为要更新的东西,第三个参数回调
User.findByIdAndUpdate('5c468ca305c7ad3944bbd741',{
password:'123'
},function(err,ret) {
if(err) {
console.log('更新失败')
}else{
console.log('更新成功')
}
})
4.5 删除数据
User.remove({
username:'钟天福'
},function(err,ret) {
if(err) {
console.log('删除失败')
}else{
console.log(ret)
}
})
学生管理系统MongoDB数据库实现
1. 将文件操作实现的系统复制一份,更改文件操作的代码
开始的操作一致,导入各种包
首先对npm进行初始化
npminit-yes
导入art-template模块引擎和express-art-template,中间空格可同时安装多个
npminstall--saveart-template express-art-template
加载请求express,使用服务器
varexpress=require('express')
varapp=express()
app.get('/',function(req,res) {
})
// 监听使用端口
app.listen(3000)
开放public和node_modules模板引擎的目录
app.use('/node_modules',express.static('./node_modules/'))
app.use('/public',express.static('./public/'))
加载express-art-template模板引擎
// 第一个参数表示读取数据的后缀名
app.engine('html',require('express-art-template'))
在处理get请求有express足够了,但是处理post请求的时候需要使用的一个插件:body-parser。get和post为表单提交的两种方式。
// 安装
npminstallbody-parser
// 加载
varbodyParser=require('body-parser')
// 使用
app.use(bodyParser.urlencoded({extended:false}))
app.use(bodyParser.json())
此处将app.get的各种方法独立出来,用路由的方式指过去使用,因此需要加载路由并挂载路由在app.js上
// 加载路由,根目录下的文件
varrouter=require('./router')
// 挂载路由,一般放在各模块最后面,监听之前
app.use(router)
除以上原有操作外,需要安装
npminstall mongoose
页面改动
//--------------new.html增加学生界面---------
value中的id要改为数据库格式的_id
//--------------edit.html增加学生界面---------
value中的id要改为数据库格式的_id
路由中的代码更改为数据库API提供的方法,无需大改
// 路由处理
// 文件读取
// 具体的处理方法在student.js中
varfs=require('fs')
// 加载express模块
varexpress=require('express')
// 用express中专门用来处理路由的方法创建一个路由
varrouter=express.Router()
// 额外封装了一个学生类,定义了对学生的各种操作的方法
varStudent=require('./student')
// ----------------------开始使用express的各种方法-----------
// 展示所有学生信息的首页,查询所有学生
router.get('/students',function(req,res) {
// 调用student.js中导出的find方法
Student.find(function(err,students) {
// 展示不成功时,输出错误在页面上
if(err) {
returnres.status(500).send('Server Error...')
}
// 成功时,使用express中的render方法,进入到index.html页面
// 展示所有的学生
res.render('index.html',{
students:students
})
})
})
// 增加一个学生的页面
router.get('/students/new',function(req,res) {
res.render('new.html')
})
// 处理增加学生表单的方法
router.post('/students/new',function(req,res) {
newStudent(req.body).save(function(err){
if(err) {
returnres.status(500).send('Server Error...')
}
// 处理成功,将页面重新加载到students页面
res.redirect('/students')
})
})
// 填写更新学生信息的表单
router.get('/students/edit',function(req,res) {
// 需要找到当前的学生信息再跳转
// replace是将id中的“”号去掉,使用了正则表达式,g表示全局
Student.findById(req.query.id.replace(/"/g,''),function(err,student) {
if(err) {
console.log(err);
returnres.status(500).send('Server Error...')
}
// 如果获取当前信息成功了则跳转到更新学生界面
// 遍历这个学生的每一个属性
res.render('edit.html', {
student:student
})
})
})
// 处理更新一个学生的表单的方法
router.post('/students/edit',function(req,res) {
varid=req.body.id.replace(/"/g,"")
Student.findByIdAndUpdate(id,req.body,function(err) {
if(err) {
returnres.status(500).send('Server Error...')
}
res.redirect('/students')
})
})
// 删除学生的操作
router.get('/students/delete',function(req,res) {
varid=req.query.id.replace(/"/g,"")
Student.findByIdAndRemove(id,function(err) {
if(err) {
returnres.status(500).send('Server Error...')
}
res.redirect('/students')
})
})
// 将router导出,使app.js可以挂载成功
module.exports=router
// 加载
varmongoose=require('mongoose')
// 连接数据库
mongoose.connect('mongodb://localhost/itcast',{useMongoClient:true})
varSchema=mongoose.Schema
// 创建模式
varstudentSchema=newSchema( {
name: {
type:String,
required:true
},
gender: {
type:Number,
// 枚举
enum: [,1],
default:
},
age: {
type:Number
},
hobbies: {
type:String
}
})
// 创建模型,将模式发布为模型
module.exports=mongoose.model('Student',studentSchema)
领取专属 10元无门槛券
私享最新 技术干货