Express操作MongoDB【一.Express框架通过Mongoose模块操作MongoDB数据库;二.在接口中间件中使用Mongoose模块】
创始人
2024-04-15 08:13:13
0

目录

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

1.MongoDB数据库:

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

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

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

2.Mongoose模块

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

(2)名词:

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

3.Mongoose模块的使用

(1)安装:npm install mongoose

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

(3)创建Schema(表示集合的骨架),再由Schema创建Model

4.mongoose的基本操作

(1)插入文档:save方法

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

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

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

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

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

(6)查询所有:find()

(7)按_id查询:findById()

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

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

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


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

1.MongoDB数据库:

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

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

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

2.Mongoose模块

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

(2)名词:

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

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

c.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)创建数据库连接文件

//1.导入mongooose模块
const Mongoose = require('mongoose');
//2.定义MongDB数据库的连接字符串:协议://主机地址:端口号/数据库名
const mdb_url = 'mongodb://localhost:27017/my_test'
//3.建立和MongDB数据库的连接:
// useNewUrlParser:true  是否使用新的url地址转换方式
// useUnifiedTopology:true  是否使用新的用户安全策略
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('disconnected',function (){console.log('断开数据库的连接!!!')
})//5.导出Mongoose
module.exports = Mongoose

(3)创建Schema(表示集合的骨架),再由Schema创建Model

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

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

若要指定集合名

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

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

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

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

(2)数据库中有集合:

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

4.mongoose的基本操作

(1)插入文档:save方法

        a.先使用Model创建Entity

        b.再使用Entity调用save方法

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

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

3.删除bookId为1012的文档
Book.findByIdAndDelete({'_id':"6386d1a48aa8b815dc0007e7",
},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)}
})

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

Book.deleteOne({'bookId':'1013'
},function (err,data){if (err){console.log('数据库连接失败'+err)}else if (data){console.log('删除成功'+data)}else if (!data){console.log('删除失败'+data)}
})

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

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

Book.findOneAndUpdate({'bookId':1012},//表示查询条件{$set:{'count':15}},//更新语句null,//表示查询操作,通常为nullfunction (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('更新成功')}
})

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

Book.updateOne({'bookId':1014},{$set:{'count':222}},function (err,data){if (err){//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()

//按_id查询:findById()
Book.findById({'_id':'200200000010000000000000'
},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://127.0.0.1:3000/mongoapi/findAll
router.get('/findAll',(req, res)=>{Book.find((err,data)=>{if (err){return console.log(err)}res.json(data)})
})module.exports = router

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...