本文详细讲解在Node.js Express框架下如何使用Mongoose模块操作MongoDB数据库。内容涵盖Mongoose核心概念(Schema、Model、Entity)的定义与关系,数据库连接的建立方法,模型名称与集合名的映射规则,以及插入、删除、更新和查询等常用数据库操作的代码实现与参数说明。
1、Mongoose模块
(1)Mongoose是一个对象模型工具,封装了Node.js环境下对MongoDB数据库的操作,能够将MongoDB中的数据转换为JavaScript对象供用户使用。
(2)核心名词解释:
- Schema:这是一种以文件形式存储的数据库模型骨架,不具备直接操作数据库的能力,仅表示程序片段中的数据表现,可理解为表结构。
- Model:由Schema发布生成的模型,具有抽象属性和行为的数据库操作功能。
- Entity:由Model创建的实体,其操作同样会影响数据库。
(3)命名规范采用驼峰命名法,例如:
PersonSchema:对应Person的Schema,包含Person的文本属性(即表结构)。
PersonModel:对应Person的Model。
PersonEntity:对应Person的Entity。
Schema生成Model,由Model生成Entity。Model和Entity均可操作数据库,但Model的可操作性更强。
2、Mongoose模块的使用
(1)安装:执行命令 npm install mongoose。
(2)创建数据库连接文件。
// 导入mongoose模块
const Mongoose = require('mongoose');
// 定义MongoDB数据库的连接字符串:协议://主机地址:端口号/数据库名
const mdb_url = 'mongodb://localhost:27017/my_test';
/*
建立和MongoDB数据库的连接
useNewUrlParser:是否使用新的url地址转换方式
useUnifiedTopology:是否使用新的用户安全策略
*/
Mongoose.connect(mdb_url,{useNewUrlParser:true,useUnifiedTopology:true});
// 对连接过程进行处理
// 建立连接 ——连接成功触发connected事件
Mongoose.connection.on('connected',()=>{
console.log('数据库连接成功~'+mdb_url);
})
// 连接异常 ——回调函数的参数中保存了异常的信息
Mongoose.connection.on('error',(e)=>{
console.log(e);
})
//断开连接 ——断开连接触发
Mongoose.connection.on('disconnected',()=>{
console.log('断开数据库的连接~');
})
// 导出mongoose
module.exports = Mongoose;(3)创建Schema,再由Schema创建Model。
- Schema:定义与集合对应的骨架,其中的属性对应MongoDB中集合的key。
- Entity是Schema的实例,用于操作MongoDB集合中的文档。
3、关于模型名称和数据库中集合名称的对应关系
(1)数据库中没有该集合时:
调用 mongoose.model('Admin',AdminSchema),集合名为模型名后加s(不区分大小写),即admins。
调用 mongoose.model('Admin',AdminSchema,'admin'),第三个参数即为定义的集合名称。
(2)数据库中已有该集合时:
调用 mongoose.model('Admin',AdminSchema,'数据库中已有的集合名')。
4、mongoose的基本操作
(1)插入文档:使用save方法。
- 先使用Model创建Entity。
- 然后使用Entity调用save方法。
const AdminModel = require('../model/adminModel');
// 通过model创建一个对象
const admin = new AdminModel({
_id:'1005',
userName:'唐僧',
password:'123456',
address:'东土大唐'
})
/*
* 通过对象调用save方法向数据库中插入数据err存放的是保存失败后的信息 res是保存的对象
*/
admin.save((err,res)=>{
if(err){
console.log(err);
}else{
console.log(res);
}
})(2)删除文档:findByIdAndDelete,直接通过Model调用,根据文档的_id属性删除。
(3)删除文档:deleteOne,直接通过Model调用,根据给定条件删除文档。
(4)更新文档:findOneAndUpdate,直接通过Model调用。
参数格式为:findOneAndUpdate(条件,更新语句,{},回调函数)。
AdminModel.findOneAndUpdate(
{'_id':'1004'}, //表示查询的条件
{$set:{'password':'789567'}}, //更新语句
null, //表示查询操作,通常为null
(err,data)=>{ //更新回调函数,err表示数据库的错误信息,data中存放的findOne查询到的文档
if(err){
console.log(err); //err表示数据库错误:查询、更新时数据库出现异常
}else if(!data){ //data为null时表示没有找到对应的文档
console.log('更新失败~');
}else if(data){ //data不为null时表示找到对应的文档
console.log('更新成功~')
}
})(5)更新文档:updateOne,参数格式为:updateOne(条件,更新语句,回调函数)。
AdminModel.updateOne({'password':'123456'},{$set:{'password':'567890'}},(err,data)=>{
if(err){
console.log(err);
}
console.log(data.modifiedCount);
})(6)查询所有:使用find方法。
AdminModel.find((err,data)=>{
if(err){
console.log(err);
}
console.log(data);
})(7)按_id查询:使用findById方法。
AdminModel.findById({
'_id':'1004'
},(err,data)=>{
if(err){
console.log(err);
}
console.log(data);
})(8)多条件查询:使用findOne,返回满足条件的第一条记录。
AdminModel.findOne({
address:'三国',
password:'123456'
},(err,data)=>{
if(err){
console.log(err);
}
console.log(data)
})(9)查询集合中的文档数量:使用count方法。
AdminModel.count((err,data)=>{
if(err){
console.log(err);
}
console.log('记录数:'+data);
})到此这篇关于NodeJs Express框架操作MongoDB数据库执行方法讲解的文章就介绍到这了,更多相关NodeJs操作MongoDB数据库内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!