一、介绍和安装
下载教程:https://www.bilibili.com/video/BV1BR4y1g7j7?from=search&seid=10863535839844474221&spm_id_from=333.337.0.0
下载地址:https://www.mongodb.com/try/download/community
菜鸟教程:https://www.runoob.com/mongodb/mongodb-tutorial.html
二、启动 停止MongoDB 服务
启动:
# mongodb默认使用执行mongod命令所处盘符根目录下的/data/db 作为自己的数据存储目录
# 所以在第一次执行该命令之前先自己手动新建一个 /data/db
D:\software\MongoDB\bin\mongod --dbpath D:\software\MongoDB\data\db
停止:ctrl + C
三、连接、退出数据库
连接
#该命令默认连接本机的mongoDB服务
mongo
退出:exit
四、基本命令
1.show dbs:查看所有的数据库
2.use 数据库名称:切换到指定数据库(如果没有会新建)
五、通过nodejs连接mongoDB
1.使用官方的mongoDB包
2.使用第三方mongoose来操作mongoBD数据库
官网:https://mongoosejs.com/
demo1.js
// 引包
const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/test');
// 创建一个模型
// MongoDB是动态的,非常灵活,只需要在代码中设计你的数据库就可以了
// mongoose这个包就可以让你的设计编写过程变得非常简单
const Cat = mongoose.model('Cat', { name: String });
// 实例化一个cat
const kitty = new Cat({ name: 'Zildjian' });
// 持久化保存Kitty实例
kitty.save().then(() => console.log('meow'));
七、Mongoose
1、设计Schema发布Model
var mongoose = require('mongoose')
var Schema = mongoose.Schema
// 1.连接数据库
mongoose.connect('mongodb://localhost/itcast')
// 2.设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 值
// 约束的目的是为了保证数据的完整性,不要有脏数据
const userSchema = new Schema({
username:{
type:String,
required:true
},
password:{
type:String,
required:true
},
email:{
type:String,
required:true
}
});
// 3.将文档架构发布为模型
// mongoose.model():将文档架构发布为模型
// 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称
// mongoose会自动将大写名词的字符串生成小写复数 的集合名称
// 第二个参数:架构Schema
// 返回值:模型构造函数
var User = mongoose.model('User',userSchema)
// 4.当我们有了模型构造函数之后,就可以用这个构造函数对users的数据中进行增删改查
2、增加数据
// 4.1 新增
var wjy = User({
username:'wjy',
password:'123',
email:'wjy@qq.com'
})
wjy.save(function (err,ret) {
if(err){
console.log("存储失败")
}else{
console.log("保存成功")
}
})
3、查询数据
// 4.2查询
// 第一个参数:对象 查询条件 若第一个参数不写,则表示查询所有
// 第二个参数:回调函数
// 查到的结果返回数组,每一个结果是一个对象。若未查到则返回空数组
User.find({
username:'zsss'
},function (err,ret) {
if(err){
console.log("查询失败")
}else{
console.log(ret)
}
})
4、删除数据
// 4.3删除数据
// 有多少删多少
User.remove({
username:"zs"
},function(err,ret){
if(err){
console.log("删除失败")
}else{
console.log("删除成功")
}
})
5、更新数据
// 4.4更新数据
// 第一个参数:更新依据
// 第二个参数:要更新的内容
// 第三个参数:回调函数
User.findByIdAndUpdate('622c074f100508df37a1abde', {
password: "123456"
}, function (err, ret) {
if (err) {
console.log("更新失败")
} else {
console.log("更新成功")
}
})
八、用mongoose重写CRUD
studet.js
var mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/mongooseCRUD')
var Schema = mongoose.Schema
var studentSchema = new Schema({
name: {
type: String,
required:true
},
gender: {
type: Number,
enum: [0, 1],//枚举 必须是0或者1
default: 0
},
age: {
type: Number
},
hobbies: {
type: String
}
})
module.exports = mongoose.model('Student', studentSchema)
router.js
/**
* router.js 路由模块
* 职责:
* 处理路由
* 根据不同的请求方法+请求路径设置具体的请求处理函数
* 模块职责要单一,不要乱写
* 我们划分模块的目的就是为了增强项目代码的可维护性
* 提升开发效率
*/
var fs = require('fs')
var Student = require('./student')
// Express 提供了一种更好的方式
// 专门用来包装路由的
var express = require('express')
// 1. 创建一个路由容器
var router = express.Router()
// 2. 把路由都挂载到 router 路由容器中
/*
* 渲染学生列表页面
*/
router.get('/students', function (req, res) {
Student.find(function (err, students) {
if (err) {
return res.status(500).send('Server error.')
}
res.render('index.html', {
fruits: [
'苹果',
'香蕉',
'橘子'
],
students: students
})
})
})
/*
* 渲染添加学生页面
*/
router.get('/students/new', function (req, res) {
res.render('new.html')
})
/*
* 处理添加学生
*/
router.post('/students/new', function (req, res) {
// 1. 获取表单数据
// 2. 处理
// 将数据保存到 db.json 文件中用以持久化
// 3. 发送响应
new Student(req.body).save(function (err) {
if (err) {
return res.status(500).send('Server error.')
}
res.redirect('/students')
})
})
/*
* 渲染编辑学生页面
*/
router.get('/students/edit', function (req, res) {
// 1. 在客户端的列表页中处理链接问题(需要有 id 参数)
// 2. 获取要编辑的学生 id
//
// 3. 渲染编辑页面
// 根据 id 把学生信息查出来
// 使用模板引擎渲染页面
// replace
// 字符串模式
// 简单,但是不支持全局和忽略大小写问题
// 正则表达式模式
// 强大,支持全局和忽略大小写
Student.findById(req.query.id.replace(/"/g, ''), function (err, student) {
if (err) {
console.log(err)
return res.status(500).send('Server error.')
}
res.render('edit.html', {
student: student
})
})
})
/*
* 处理编辑学生
*/
router.post('/students/edit', function (req, res) {
// 1. 获取表单数据
// req.body
// 2. 更新
// Student.updateById()
// 3. 发送响应
var id = req.body.id.replace(/"/g, '')
Student.findByIdAndUpdate(id, req.body, function (err) {
if (err) {
return res.status(500).send('Server error.')
}
res.redirect('/students')
})
})
/*
* 处理删除学生
*/
router.get('/students/delete', function (req, res) {
// 1. 获取要删除的 id
// 2. 根据 id 执行删除操作
// 3. 根据操作结果发送响应数据
var id = req.query.id.replace(/"/g, '')
Student.findByIdAndRemove(id, function (err) {
if (err) {
return res.status(500).send('Server error.')
}
res.redirect('/students')
})
})
// 3. 把 router 导出
module.exports = router
九、node-mysql
使用node操作mysql数据库
1、安装
npm install mysql --save