15.MongoDB数据库

1.介绍与安装

介绍

MongoDB是非关系型数据库,基于分布式文件存储的开源数据库系统

理解关系型数据库与非关系型数据库(表就是关系)

关系型数据库(mysql)

  • 关系型数据库需要数据库操作
  • 关系型数据库在操作之前需要设计表结构
  • 数据支持约束(唯一性,主键,默认值,非空)

非关系型数据库(MongoDB)

  • 非关系数据库非常灵活
  • 大多是 key-value
  • 在MongoDB中

数据库=>数据库
数据表=>集合(数组)
表记录->(文档对象)

  • 不需要设计表结构

  • 可以任意存数据,无结构性

  • 组成:数据库,集合,文档

{ 数据库名称:{ 表名称:[ 字段 ] } }

安装

下载地址 https://www.mongodb.com/try/download/community

配置环境变量

  1. 复制mongoDB下载的bin地址:C:\Program Files\MongoDB\Server\5.0\bin
  2. 打开环境变量->找到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.基本步骤

  1. 引入模块
const mongoose = require('mongoose')

  1. 创建模型(设计一个数据库)
mongoose.connect("mongodb://localhost/test1");//test1为数据库名称
  1. 设置文档结构(表结构)

Scheme方法
设置字段必须有 required:true

const Schema = mongoose.Schema   //引入Schema方法
var userSchema = new Schema({//userSchema数据库结构方法名
    username: {
        type: String,
        required: true//设置字段为必须
    },
    pwd: {
        type: String,
        required: true
    }
})
  1. 实例化文档结构(将文档结构发布为模型)
const User = mongoose.model('User', userSchema)
  1. 对数据表增删改查操作(增删改查)
  2. 持久化保存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('删除成功')
                }
        })
posted @ 2021-12-09 22:25  禾耳  阅读(96)  评论(0)    收藏  举报