目录

  • 一、Node访问MongoDB数据库
  • 1、Mongoose模块
  • 2、Schema
  • 3、Model
  • 4、Entity
  • 5、使用方法
  • (1)安装模块
  • (2)创建配置文件,完成与MongoDB的连接
  • (3)创建Schema
  • (4)由Schema创建Model
  • (5)创建路由文件
  • (6)增、删、改、查操作


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

测试结果:

怎么在后台启动mongodb 打开mongodb_mongodb

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;

怎么在后台启动mongodb 打开mongodb_json_02

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数据库里面是否有张扬:

怎么在后台启动mongodb 打开mongodb_怎么在后台启动mongodb_03

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

怎么在后台启动mongodb 打开mongodb_mongodb_04

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;

测试结果如下:

怎么在后台启动mongodb 打开mongodb_怎么在后台启动mongodb_05