经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MongoDB » 查看文章
NodeJs Express框架操作MongoDB数据库执行方法讲解
来源:jb51  时间:2023/1/11 8:38:43  对本文有异议

1、Mongoose模块

(1)是一个对象模型工具,是对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)创建数据库连接文件

  1. // 导入mongoose模块
  2. const Mongoose = require('mongoose');
  3. // 定义MongoDB数据库的连接字符串:协议://主机地址:端口号/数据库名
  4. const mdb_url = 'mongodb://localhost:27017/my_test';
  5. /*
  6. 建立和MongoDB数据库的连接
  7. useNewUrlParser:是否使用新的url地址转换方式
  8. useUnifiedTopology:是否使用新的用户安全策略
  9. */
  10. Mongoose.connect(mdb_url,{useNewUrlParser:true,useUnifiedTopology:true});
  11. // 对连接过程进行处理
  12. // 建立连接 ——连接成功触发connected事件
  13. Mongoose.connection.on('connected',()=>{
  14. console.log('数据库连接成功~'+mdb_url);
  15. })
  16. // 连接异常 ——回调函数的参数中保存了异常的信息
  17. Mongoose.connection.on('error',(e)=>{
  18. console.log(e);
  19. })
  20. //断开连接 ——断开连接触发
  21. Mongoose.connection.on('disconnected',()=>{
  22. console.log('断开数据库的连接~');
  23. })
  24. // 导出mongoose
  25. module.exports = Mongoose;

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

  • Schema:定义的是与集合对应的骨架。Schema中的属性对应的是MongoDB中集合的key。
  • 是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方法
  1. const AdminModel = require('../model/adminModel');
  2. // 通过model创建一个对象
  3. const admin = new AdminModel({
  4. _id:'1005',
  5. userName:'唐僧',
  6. password:'123456',
  7. address:'东土大唐'
  8. })
  9. /*
  10. * 通过对象调用save方法向数据库中插入数据err存放的是保存失败后的信息 res是保存的对象
  11. */
  12. admin.save((err,res)=>{
  13. if(err){
  14. console.log(err);
  15. }else{
  16. console.log(res);
  17. }
  18. })

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

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

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

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

  1. AdminModel.findOneAndUpdate(
  2. {'_id':'1004'}, //表示查询的条件
  3. {$set:{'password':'789567'}}, //更新语句
  4. null, //表示查询操作,通常为null
  5. (err,data)=>{ //更新回调函数,err表示数据库的错误信息,data中存放的findOne查询到的文档
  6. if(err){
  7. console.log(err); //err表示数据库错误:查询、更新时数据库出现异常
  8. }else if(!data){ //data为null时表示没有找到对应的文档
  9. console.log('更新失败~');
  10. }else if(data){ //data不为null时表示找到对应的文档
  11. console.log('更新成功~')
  12. }
  13. })

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

  1. AdminModel.updateOne({'password':'123456'},{$set:{'password':'567890'}},(err,data)=>{
  2. if(err){
  3. console.log(err);
  4. }
  5. console.log(data.modifiedCount);
  6. })

(6)查询所有:find

  1. AdminModel.find((err,data)=>{
  2. if(err){
  3. console.log(err);
  4. }
  5. console.log(data);
  6. })

(7)按_id查询:findById

  1. AdminModel.findById({
  2. '_id':'1004'
  3. },(err,data)=>{
  4. if(err){
  5. console.log(err);
  6. }
  7. console.log(data);
  8. })

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

  1. AdminModel.findOne({
  2. address:'三国',
  3. password:'123456'
  4. },(err,data)=>{
  5. if(err){
  6. console.log(err);
  7. }
  8. console.log(data)
  9. })

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

  1. AdminModel.count((err,data)=>{
  2. if(err){
  3. console.log(err);
  4. }
  5. console.log('记录数:'+data);
  6. })

到此这篇关于NodeJs Express框架操作MongoDB数据库执行方法讲解的文章就介绍到这了,更多相关NodeJs操作MongoDB数据库内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号