Node学习-05-MongoDB
安装MongoDB
-
安装可以参考菜鸟,安装完成后配置环境变量才会生效
-
验证:
mongod -version
开启和关闭MongoDB数据库
-
确保安装目录所在盘根目录下存在
data/db
文件夹(数据存储目录) -
cmd中输入
mongod
启动数据库 -
修改数据存储目录
mongod --dbpath=数据存储目录路径
-
停止:
ctrl + c
或者直接关闭cmd
MongoDB基本感知
连接数据库
// 默认连接本机的MongoDB服务
mongo
退出
exit
基本命令
-
显示所有数据库
show dbs
-
查看当前操作的数据库
db
-
创建数据库
use 数据库名称(如果没有会新建)
-
插入数据
db.students.insertOne({"name": "xxx"});
-
查看所有数据
db.students.find();
在Node中操作MongoDB数据
mongoose
使用第三方mongoose
来操作MongoDB数据库
安装
npm install --save mongodb
使用demo
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
const Cat = mongoose.model('Cat', { name: String });
// const kitty = new Cat({ name: 'Zildjian' });
// kitty.save().then(() => console.log('meow'));
for (var i = 0; i< 100; i++) {
var kitty = new Cat({name: '喵喵' + i});
kitty.save().then(() => {
console.log('meow');
})
}
基本概念
- 数据库,可以存在多个数据库
- 数据表 -> 集合,集合简单理解就是数组
- 文档
{
// 数据库
qq: {
// 集合
users: [
// 文档
{id: 1, name: 'aaa'},
{id: 2, name" 'bbb'}
],
products: []
},
taobao: {
},
baidu: {
}
}
CRUD基本用法
// 引入
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// 连接数据库
// localhost itcast数据库
// 如果itcast数据库不存在,当插入第一条数据库之后,自动创建
mongoose.connect('mongodb://localhost/itcast');
// 设计集合结构/表结构
// 字段名称就是表结构中的属性名称
const userSchema = new Schema({
username: {
type: String,
required: true
},
password: {
type: String,
required: true
},
email: {
type: String
}
});
// 将文档结构发布为模型
// mongoose.model方法就是用来将一个架构发布为model
// 第一个参数:传入一个大写名词单数字符串,用来表示数据库名称,mongoose会自动将
// 大写名词的字符串 生成 小写复数 的集合名词 User -> users
// 第二个参数, 架构Schema
// 返回值:模型构造函数
const User = mongoose.model('User', userSchema);
// 当有了模型构造数据之后,就可以使用这个构造函数对user集合中的数据进行增删改查了
// 增加数据
const admin = new User({
username: 'admin',
password: '123456',
email: 'admin@123.com'
});
admin.save().then((res) => {
console.log(res);
console.log('保存成功');
});
// 查询数据
// 1. 查询所有
console.log('----------查询所有-------------------');
User.find().then(res => console.log(res));
// 按条件查询,返回一个数组
console.log('----------按条件查询-------------------');
User.find({ username: 'ZS' }).then(res => console.log(res));
// 只查询一个,只返回一个对象
console.log('----------只查询一个-------------------');
User.findOne({ username: 'ZS' }).then(res => console.log(res));
// 删除数据
User.deleteMany({ username: 'ZS' }).then(res => console.log(res));
// 更新数据
User.findByIdAndUpdate("61061a42c988a30d10ec8e1d", { password: '123' })
.then(res => console.log(res));
CRUD案例mongoose重写
students.js
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/students', { useUnifiedTopology: true }, { useNewUrlParser: true });
const Schema = mongoose.Schema;
const studentSchema = new Schema({
name: {
type: String,
required: true
},
gender: {
type: String,
enum: ['0', '1'],
required: true
},
age: {
type: Number
},
hobbies: {
type: String
}
});
module.exports = mongoose.model('Student', studentSchema);
router.js
const fs = require('fs');
const Student = require('./students.js');
const express = require('express');
// 1. 创建一个路由容器
const router = express.Router();
// 2. 把路由都挂载到路由容器中
// 主界面
router.get('/students', function (req, res) {
Student.find(function (err, data) {
if (err) {
return res.status(500).send('Server error');
}
res.render('index.html', {
students: data
})
})
})
// 新增页面
router.get('/students/new', function (req, res) {
res.render('new.html');
})
// 点击新增时候的处理
router.post('/students/new', function (req, res) {
const student = new Student(req.body);
student.save(function (err, data) {
if (err) {
return res.status(500).send('Server error');
}
res.redirect('/students');
});
})
// 编辑页面
router.get('/students/edit', function (req, res) {
Student.findById(req.query.id, function (err, data) {
if (err) {
return res.status(500).send('Server error');
}
res.render('edit.html', {
student: data
})
})
})
// 点击编辑时候的处理
router.post('/students/edit', function (req, res) {
const id = req.body.id;
Student.findByIdAndUpdate(id, req.body, function (err, data) {
if (err) {
return res.status(500).send('Server error');
}
res.redirect('/students');
})
})
// 点击删除时候的处理
router.get('/students/delete', function (req, res) {
Student.findByIdAndRemove(req.query.id, function(err, data) {
if (err) {
return res.status(500).send('Server error');
}
res.redirect('/students');
});
})
module.exports = router;