• 【Node访问MongoDB数据库】


    一、Node访问MongoDB数据库

    1、Mongoose模块

    Mongoose模块 :是Node访问MongoDB数据库的封装。采用对象模式将数据库中的数据转换成JavaScript中的对象。

    2、Schema

    Schema : 它是一种以文件形式存储的数据库模型骨架(表结构)

    3、Model

    Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对

    4、Entity

    Entity : 由Model创建的实体,他的操作也会影响数据库

    5、使用方法

    (1)安装模块

    npm install mongoose

    (2)创建配置文件,完成与MongoDB的连接

    mongocofig.js文件:

    //导入mongoose模块
    const mongoose = require('mongoose')
    //定义连接mongoDB的字符串(连接地址)
    const db_url = 'mongodb://localhost:27017/mvc'
    //连接
    mongoose.connect(db_url,{useNewUrlParser:true,useUnifiedTopology:true});
    
    //连接成功
    mongoose.connection.on('connected',function (){
        console.log('MongoDB Connection open'+db_url)
    })
    //连接失败
    mongoose.connection.on('error',function (err){
        console.log('MongoDB Connection error:'+err)
    })
    //断开连接
    mongoose.connection.on('disconnected',function(){
        console.log('MongoDB disconnected ')
    })
    
    module.exports = mongoose
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    (3)创建Schema

    (4)由Schema创建Model

    ClassesSchema.js代码如下:

    const mongoose = require('../mongoconfig')
    const Schema = mongoose.Schema
    
    //定义Schema
    var ClassesSchema = new Schema({
        name:{type:String},
        age:{type:Number},
        sex:{type:String},
        hobby:{type:Array}
    })
    
    //由Schema生成Model,用Model操作数据库
    module.exports = mongoose.model('Classes',ClassesSchema)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (5)创建路由文件

    配置路由文件app.js:

    var mongoRouter =require('./routes/mongo')
    app.use('/mongo',mongoRouter)
    
    • 1
    • 2

    (6)增、删、改、查操作

    A、增加:使用Model的实例调用save方法(注意:只有增加使用Entity操作数据库)

    Model:ClassesModel

    Entity :clazz = new ClassesModel()

    clazz.save()

    const express = require('express')
    const ClassesModel = require('../config/model/ClassesSchema')
    const router =express.Router()
    //http://localhost:3000/mongo/add
    router.post('/add',(req, res) => {
        let clazz =new  ClassesModel({
            name:'黄蓉',
            age:22,
            sex:'女',
            hobby:['武术','绘画']
        })
        clazz.save(function (err,result){
            if(err){
                res.json({
                    code:1001,
                    msg:'插入数据失败'
                })
            }else{
                res.json({
                    code:1002,
                    msg:'插入数据成功',
                    data:result
                })
            }
        })
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    测试结果:
    在这里插入图片描述

    B、删除:使用Model操作数据库

    mongoose删除方法说明
    deleteOne删除一条记录,返回删除的数量
    deleteMany删除多条记录,返回删除的数量
    findOneAndDelete先查找后删除,若没有找到匹配的记录不执行删除,返回null
    findByIdAndDelete① 没有符合 id 的数据时,返回 null。 ② id 为空或 undefined 时,返回 null。③ 删除成功返回 {} 形式的原数据。

    deleteOne:

    const express = require('express')
    const ClassesModel = require('../config/model/ClassesSchema')
    const router =express.Router()
    //http://localhost:3000/mongo/remove
    router.delete('/remove',(req, res) => {
        ClassesModel.deleteOne({'name':'小明'},(err,result)=>{
            if(err){
                res.json({
                    code:1001,
                    msg:'删除失败'
                })
            }else{
                res.json({
                    code:1002,
                    msg:'删除成功',
                    data:result
                })
            }
        })
    })
    
    module.exports = router;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    findOneAndDelete:

    const express = require('express')
    const ClassesModel = require('../config/model/ClassesSchema')
    const router =express.Router()
    //http://localhost:3000/mongo/remove
    router.delete('/remove',(req, res) => {
        ClassesModel.findOneAndDelete({'name':'张扬'},(err,result)=>{
                if(err){
                    res.json({
                        code:1001,
                        msg:'删除失败'
                    })
                }else{
                    res.json({
                        code:1002,
                        msg:'删除成功',
                        data:result
                    })
                }
        })
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    我们看一下mongdb数据库里面是否有张扬:
    在这里插入图片描述

    先查找后删除,若没有找到匹配的记录不执行删除,返回null:

    在这里插入图片描述

    C、更新:使用Model操作数据库

    mongoose更新方法说明
    updateOne、updateMany返回更新的数量
    findOneAndUpdate、findByIdAndUpdate查找后更新,若没有找到匹配的记录不执行删除,返回null

    D、查询:使用Model操作数据库

    mongoose查询方法说明
    find()查询所有
    findOne({})按条件查询
    findById()按id查询
    路由文件mongo.js代码如下:
    
    ```javascript
    const express = require('express')
    const ClassesModel = require('../config/model/ClassesSchema')
    const router =express.Router()
    
    //http://localhost:3000/mongo/findAll
    router.get('/findAll',(req, res) => {
        ClassesModel.find(function (err,result){
            if(err){
                console.log(err)
                res.send({
                    code:1001,
                    msg:'查询失败'
                })
            }else{
                res.send({
                    code:1002,
                    msg:'查询成功',
                    data:result
                })
            }
        })
    })
    module.exports = router;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    测试结果如下:

    在这里插入图片描述

  • 相关阅读:
    c++ noexcept与constexpr解析
    Docker 部署 OCRmyPDF、提取PDF内容
    shell脚本下用plot给iostat和CPU的采样画图的写法
    八、手把手教你搭建SpringCloudAlibaba之Sentinel服务降级
    linux下安装mysql客户端client
    【Minio】新一代自建文件系统——Minio
    Spring Security—OAuth2 授权许可
    2022-30周 项目问题整理
    面向对象分析与设计
    Nginx基础
  • 原文地址:https://blog.csdn.net/m0_46839072/article/details/126062979