【Node访问MongoDB数据库】

本文介绍了如何使用Node.js的Mongoose模块连接并操作MongoDB数据库,包括配置连接、定义Schema、创建Model、执行增删改查操作。详细步骤从安装模块到实现CRUD操作,适合初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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

(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)

(5)创建路由文件

配置路由文件app.js:

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

(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
            })
        }
    })
})

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

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;

在这里插入图片描述

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
                })
            }
    })
})

我们看一下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;

测试结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值