15.MongoDB数据库
1.介绍与安装
介绍
MongoDB是非关系型数据库,基于分布式文件存储的开源数据库系统
理解关系型数据库与非关系型数据库(表就是关系)
关系型数据库(mysql)
- 关系型数据库需要数据库操作
- 关系型数据库在操作之前需要设计表结构
- 数据支持约束(唯一性,主键,默认值,非空)
非关系型数据库(MongoDB)
- 非关系数据库非常灵活
- 大多是 key-value
- 在MongoDB中
数据库=>数据库
数据表=>集合(数组)
表记录->(文档对象)
-
不需要设计表结构
-
可以任意存数据,无结构性
-
组成:数据库,集合,文档
{ 数据库名称:{ 表名称:[ 字段 ] } }
安装
下载地址 https://www.mongodb.com/try/download/community
配置环境变量
- 复制mongoDB下载的bin地址:C:\Program Files\MongoDB\Server\5.0\bin
- 打开环境变量->找到path
检测安装是否成功
命令行输入mongod --version
2.开始
启动数据库 : mongod
- 默认使用执行 mongod 命令所处盘符根目录下的/data/db 作为自己的数据存储目录,第一次执行该命令需要手动新建data/db目录,用于存储数据
- 如果想修改默认的数据存储目录 :mongod --dbpath =数据存储目录路径
关闭数据库
控制台ctrl+c
连接数据库
mongo
退出连接
exit
3.基本命令
查看显示所有数据库
show dbs
切换到指定的数据库
use 数据库名
查看当前操作的数据库
db
插入数据
mongo.表名.insert
查看表内容
db.表名.find()
查看更多表数据(数据太多加载不出来时)
it+ 回车
4.在node中操作MongoDB数据库(mongoose模块)
1.下载第三方模块mongoose => npm i mongoose
2.基本步骤
- 引入模块
const mongoose = require('mongoose')
- 创建模型(设计一个数据库)
mongoose.connect("mongodb://localhost/test1");//test1为数据库名称
- 设置文档结构(表结构)
Scheme方法
设置字段必须有 required:true
const Schema = mongoose.Schema //引入Schema方法
var userSchema = new Schema({//userSchema数据库结构方法名
username: {
type: String,
required: true//设置字段为必须
},
pwd: {
type: String,
required: true
}
})
- 实例化文档结构(将文档结构发布为模型)
const User = mongoose.model('User', userSchema)
- 对数据表增删改查操作(增删改查)
- 持久化保存kitty实例
5.对数据表增删改查操作
代码运行一次就会往数据库执行一次操作
表名.findByIdAndRemove(('id名'),{字段内容},callback)
表名.find/remove/updateByIdAndRemove(('id名'),{字段内容},callback)
5.1增加(插入)
const admin = new User({
username: 'admin',
pwd: '123456',
email: '123456@qq.com'
})
admin.save(function (err, ret) {
if (err) {
console.log('保存失败')
} else {
console.log('保存成功')
console.log(ret)//打印结果
}
})
5.2查询
查询所有
User.find(function (err, ret) {
if (err) {
console.log(err)
} else {
console.log('查询成功');
console.log(ret)
}
})
条件查询:查询所有username是admin的数据
User.find({username:'admin'},function(err,ret){
if(err){
console.log(err)
}else{
console.log('查询成功');
console.log(ret)
}
})
查询单个
User.findOne({username:'admin'},function(err,ret){
if(err){
console.log(err)
}else{
console.log('查询成功');
console.log(ret)
}
})
根据id查询单个
User.findById('61b373ab90b40560339ded85',function(err,ret){
if(err){
console.log('更新失败');
}else{
console.log('更新成功');
console.log(ret);
}
})
查询固定键值
//只会查询到'first', 'last'字段
Model.find({}, ['first', 'last'], function (err, docs) {})
模糊查询
var text = 'Nodejs';//动态传入的变量
Article.find({ content: { $regex: text, $options: 'i' }}, function (err, docs) {});
/*$options选项值:
i 大小写不敏感
m $regex包含正则^,$符号的表达式
x 忽略空格
s 允许逗点匹配所有字符串*/
5.3删除
根据条件删除所有
User.remove({
username:'admin'
},function(err,ret){
if(err){
console.log('删除失败');
}else{
console.log('删除成功');
console.log(ret);
}
})
根据条件删除一个
User.findByOneAndRemove({ username:'admin'},{password:'123456'},function(err,ret){
if(err){
console.log('删除失败');
}else{
console.log('删除成功');
}
})
根据id删除一个
User.findByIdAndRemove('61b373ab90b40560339ded85',{password:'123456'},function(err,ret){
if(err){
console.log('删除失败');
}else{
console.log('删除成功');
}
})
5.4更新数据
根据条件更新所有
User.update({username:'admin'},{pwd:'123'},function(err,ret){
if(err){
console.log('更新失败');
}else{
console.log('更新成功');
console.log(ret);
}
})
根据条件更新一个
User.findOneAndupdate({username:'admin'},{pwd:'123'},function(err,ret){
if(err){
console.log('更新失败');
}else{
console.log('更新成功');
console.log(ret);
}
})
根据id更新一个
User.findByIdAndUpdate('61b373ab90b40560339ded85',{pwd:'123'},function(err,ret){
if(err){
console.log('更新失败');
}else{
console.log('更新成功');
console.log(ret);
}
})
6.mongodb版本的curd
操作文件文档中操作
1.引入mongoose数据库框架
2.连接数据库
3.设计文档结构
- 引入Schema
- 创建文档结构对象
4.导出模型构造函数
// -------------使用mongodb获取到数据
// 引入mongoose数据库框架
const mongoose=require('mongoose')
// 连接数据库
mongoose.connect("mongodb://localhost/test1")
// 创建文档结构变量
const Schema=mongoose.Schema
//
var studentSchame=new Schema({
name:{
type:String,
required:true
},
tel:{
type:Number,
required:true,
// enum:[0,1],// 枚举0/1
default:0//默认为0
},
state:{
type:String,
required:true
},
cttime:{
type:Date,
// required:true
}
})
// 导出模型构造函数
module.exports=mongoose.model('student',studentSchame)
路由器操作
在路由中进行增删改查
使用mongodb的增删改查语法
//渲染主页
router.get('/', (req, res) => { //主页
// 数据操作模块的find方法
student.find((err, studentList) => {
if (err) {
res.status(500).send("server error")
} else {
res.render("index.html", {
studentList
})
}
})
//使用模板引擎渲染
})
//增加处理
router.post('/add', (req, res) => {
// 1.获取表单提交数据
// 2.操作处理
//将数据保存到db.json
// 3.发送响应
// /mongdb中添加必须要new一个对象
let d=new Date()
req.body.cttime=d.toLocaleDateString();
new student(req.body).save((err) => {
if (err) {
console.log(err)
res.status(500).send("server error")
}
res.redirect('/') //重定向到首页
})
})
//
7.运算符匹配符
1.$in根据条件查询或者删除多个/单个
- 根据id查询后执行删除
//4.根据id删除单个
.get('/api/commodityDelOne',async (req, res) => {
// 删除单个
// let res1=await Commodity.remove({
// _id: {
// $in: ['61f90558f8cdfdceff1c394d']
// }
// })
// 删除多个
let res1=await Commodity.remove({
_id: { //$in字符选择查询_id字段带有61f91818353f2b794afef792,61f9190d6a50f6c0160e40a8的条件行
$in: ['61f91818353f2b794afef792', '61f9190d6a50f6c0160e40a8']
}
})
if(res1){
res.send('删除成功')
}
})

浙公网安备 33010602011771号