Express操作MongoDB、在接口中间件中使用Mongoose模块

导读:本篇文章讲解 Express操作MongoDB、在接口中间件中使用Mongoose模块,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、Express框架通过Mongoose模块操作MongoDB数据库

1. MongoDB数据库

​ (1)存放数据的格式:key-value

​ (2)数据库(database) ——- 集合(collection) ——- 文档(document)

​ (3)是众多NoSQL数据库中一款:非关系型数据库,不能使用SQL语句对数据库进行操作

2. Mongoose模块

​ (1)是一个对象模型工具,是对Node.js环境下操作MongoDB数据库进行了封装,可以将MongoDB数据库中的数据转换成javascript对象供用户使用。

​ (2)名词:

          Schema : 它是一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力,仅仅只是数据库在程序片段中的一种表现,可以理解为表结构,实现一种映射。

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

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

​ (3)命名规范:驼峰命名,例如:

  • ​ PersonSchema:Person对应的Schema,Person的文本属性(表结构)
  • ​ PersonModel:Person对应的模型。
  • ​ PersonEntity:Person对应的实体

​ Schema生成Model,由Model生成Entity,Model和Entity都可以操作数据库,Model的可操作性更强

3. Mongoose模块的使用

​ (1)安装:npm install mongoose

​ (2)创建数据库连接文件:

//dbconfig.js
//1.导入mongoose模块
const Mongoose = require('mongoose')
// 2.定义MongoDB数据库的连接字符串:协议://主机地址:端口号/数据库名
const mdb_url = 'mongodb://127.0.0.1:27017/mvc'
/*  3.建立和MongoDB数据库的连接:
       useNewUrlParser:是否使用新的url地址转换方式
       useUnifiedTopology:是否使用新的用户安全策略
*/
Mongoose.connect(mdb_url,{useNewUrlParser:true,useUnifiedTopology:true})
// 4.对连接过程进行处理
//4.1 : 建立连接---连接成功触发connected事件
Mongoose.connection.on('connected',function (){
    console.log('数据库连接成功!连接地址是:'+mdb_url)
})
// 4.2 : 连接异常 --- 回调函数的参数中保存了异常的信息
Mongoose.connection.on('error',function (err){
    console.log('数据库连接异常!'+err)
})
// 4.3 : 断开连接
Mongoose.connection.on('disconnectied',function (){
    console.log('断开数据库的连接!')
})
// 5. 导出Mongoose
module.exports = Mongoose

(3)创建Schema,再由Schema创建Model

          Schema:定义的是与集合对应的骨架。Schema中的属性对应的是MongoDB中集合的key

          Model:是Schema的实例,用于操作MongoDB中的集合中的文档

//bookmodel.js
//1.导入配置文件
const Mongoose = require('../dbconfig')
//2.导入Schema
const Schema = Mongoose.Schema

//3.定义Schema:要和数据库中的集合对应(Schema的属性对应集合中的键)
const BookSchema = new Schema({
    bookId:{type: Number},
    bookName:{type:String},
    publishing:{type:String},
    publishTime:{type:Date},
    price:{type: Number},
    count:{type:Number},
})

//4.由Schema生成Model:model(模型名:Schema名),导出model
module.exports = Mongoose.model('Book',BookSchema)
//crud.js
const Book = require('../model/bookmodel')
// 1.通过model创建一个对象
const book = new Book({
    bookId:200101,
    bookName: 'MongoDB数据库教程',
    publishing: '机械工业出版社',
    publishTime: '2005-10-27',
    price: 56,
    count: 10
})
// 2.通过对象调用save方法向数据库中插入数据
//err是保存失败后的错误信息,res是保存的对象
book.save(function (err,res) {
    if (err){
        console.log(err)
    }else{
        console.log(res)
    }
})

Express操作MongoDB、在接口中间件中使用Mongoose模块

 若要指定集合名

Express操作MongoDB、在接口中间件中使用Mongoose模块

           关于模型名称和数据库中集合名称的对应关系

(1)数据库中没有集合:

​           mongoose.model(‘Book’,BookSchema) ==> 在模型名后加s就是集合名(不区分大小写) ==> books

​           mongoose.model(‘Book’,BookSchema,’bookinfo’) ==> 第三个参数就是用户定义的集合名

(2)数据库中有集合:

​           mongoose.model(‘Book’,BookSchema,’数据库中已有的集合名’)

4. mongoose的基本操作

​ (1)插入文档:save方法

​           先使用Model创建Entity

​           再使用Entity调用save方法

const Book = require(‘../model/bookModel’)
// 1.通过model创建一个对象
const book = new Book({
bookId:200101,
bookName: ‘MongoDB数据库教程’,
publishing: ‘机械工业出版社’,
publishTime: ‘2005-10-27’,
price: 56,
count: 10
})
// 2.通过对象调用save方法向数据库中插入数据
//err是保存失败后的错误信息,res是保存的对象
book.save(function (err,res) {
if (err){
console.log(err)
}else{
console.log(res)
}
})

(2)删除文档:findByIdAndDelete,直接通过Model调用,作用是根据文档的_id属性删除

Book.findByIdAndDelete({
‘_id’:’63554959be8cddf0ba26241d’
},function(err,data){
if (err){ //err:数据库错误,例如删除时数据库连接超时
console.log(err)
}else if(data){ //若data不为null:表示删除成功
console.log(‘删除成功:’+data)
}else if(!data){ //若data为null:表示删除失败
console.log(‘删除失败:’+data)
}
})

​           删除文档:deleteOne,直接通过Model调用,根据给定的条件删除文档

//删除bookid为1012的文档
Book.deleteOne({
    'bookId':1012
},function (err,data) {
    if (err){
        console.log(err)
    }else if(data){
        console.log('删除成功:'+data)
    }
})

(4)更新文档:findOneAndUpdate,直接通过Model调用

​ ​           findOneAndUpdate(条件,更新语句,{},回调函数)

Book.findOneAndUpdate(
    { 'bookId':1001},  //表示查询的条件
    {$set:{'count':15}}, //更新语句
    null,//表示查询操作,通常为null
    function (err,data) { //更新回调函数:err表示数据库的错误信息,data中存放的findOne查询到的文档
        if (err){ //err表示数据库错误:查询、更新时数据库出现异常
            console.log(err)
        }else if(!data){ //data为null时,表示没有找到相应的文档
            console.log('未找到相应的数据:'+data)
        }else if(data){ //data不为null,表示找到了相应的文档,data中保存的是更新前的文档
          console.log('更新成功:'+data)
        }
})

(5)updateOne(条件,更新语句,回调函数)

Book.updateOne({'bookId':1001},{$set:{'count':100}},function (err,data){
    if (err){
        console.log(err)
    }
    console.log(data.modifiedCount) //data是对象,modifiedCount属性表示被更新的记录数,不为0即更新成功
})

(6)查询所有:find

Book.find(function (err,data){
    if (err){
        console.log(err)
    }
    console.log(data)
})

(7)按_id查询:findById

Book.findById({
    '_id':'2002000000c0000000000000'
},function(err,data){
    if (err){
        console.log(err)
    }
    console.log(data)
})

(8)多条件查询:findOne ===> 返回满足条件的第一条

Book.findOne({
    publishing:'机械工业出版社',
    count:10
},function(err,data){
    if (err){
        console.log(err)
    }
    console.log(data)
})

(9)查询集合中的文档数量(记录数):count

Book.count(function (err,data){
    if (err){
        console.log(err)
    }
    console.log('记录数:'+data)
})

二、在接口中间件中使用Mongoose模块

const express = require('express')
const router = express.Router()
const Book = require('../../db/model/bookModel')
//定义查询所有接口:http://localhost:8089/mongoapi/findAll
router.get('/findAll',(req,res)=>{
    Book.find((err,data)=>{
        if (err){
            return console.log(err)
        }
        res.json(data)
    })
})
module.exports = router

总结:Express框架访问MongoDB数据库 

1. 目的

​ (1)mongoose模块的使用

​ (2)学会代码的封装:dao层、service层、接口层

​ (3)MVC设计思想:M(Model)、V(View)、C(Controller)

2. 设计思路

​ (1)数据库:blog集合(blogId、title、content、type、author、createAt)

​ (2)创建Dao层:创建Schema —-> 创建模型Model —-> 操作数据库中的blog集合

​ (3)创建Service层:调用dao层访问数据库、接收客户端的数据、把处理的结果响应给客户端

​ (4)创建接口层:路由接口(路由中间件)

​ (5)测试接口

​ (6)创建前端页面

​ (7)实现blogId的自增

3. 代码实现

​ (1)创建Express项目:确定端口号、跨域的设置、代码更新能自动重启

​ (2)项目目录结构的设置:

         ​ dao(config、model、crud)

         ​​ service

​ (3)安装mongoose、定义配置文件(连接数据库)

” class=”reference-link”>

Express操作MongoDB、在接口中间件中使用Mongoose模块

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/79757.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!