Express框架连接MongoDB数据库操作

news2025/1/13 9:47:39

        在上一篇中已经在Node.js中引入使用了mongoose进行MongoDB数据库的基本操作,在本篇当中在Express框架中来连接数据库以及操作数据库; 

Express 项目环境

         这里是通过全局安装Express框架生产的项目环境,也可以通过局部安装的方式,安装过程可以在往期的篇目中去看一下,附上链接: Express框架 安装_express框架安装

express expMongoPro
npm install

局部安装mongoose模块

npm install mongoose -s

 连接数据库

         首先引入mongoose模块,通过connect()方法连接数据库,然后通过Schema进行定义document框架规范数据类型,再通过通过model()方法发布模型,最后将模块进行导出供其他程序加载使用;

1. 编写代码

1 . 在 /public/javascript/ 的目录下创建这个文件 conn_mongodb.js 编写代码:

const mongoose = require('mongoose');
mongoose.set('strictQuery',true);
mongoose.connect('mongodb://127.0.0.1:27017/syan',function(err){
    if(err){
        console.log("—— 连接异常 ——");
    }else{
        console.log("—— 连接成功 ——");
    }
})

// document框架
const infoSchema = new mongoose.Schema({
    name:String,
    age:Number
});

// Model - global(全局)
global.infoModel = mongoose.model("syan",infoSchema,"sen");

// 共享
module.exports = mongoose;

2 . 测试引入打印:在 /routes/index.js文件中编写 ;

const conn= require('../public/javascripts/conn_sql')


 操作数据库

数据库已经连接成功了,下面要来操作数据库的增删查改:

        在 routes/index.js 文件中编写路由文件,引入conn_mongodb.js文件,通过请求url http://127.0.0.1:3000/all 时,进行查询数据库的数据操作:

const express = require('express');
const router = express.Router();
const conn = require('../public/javascripts/conn_mongodb');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

/* 查 */
router.all('/all',function(req,res){
    // 查询操作
    infoModel.find({}).exec(function(err,data){
        if(err){
            res.send("查询异常");
        }else{
            console.log("查询成功");
            res.send(data);
        }
    })
})

module.exports = router;

 通过命令 npm start 将项目跑起来:

在浏览器中输入请求url地址: http://127.0.0.1:3000/all 或 http://localhost:3000/all

 以上就进行了数据库的查询操作;

         通过请求url 往数据库里添加数据操作;添加一条文档 <name:LIN ,age:18 >;

1. 代码编写

/* 增 */ 
router.get('/save',function(req,res){
    // 添加数据 —— <name>:LIN <age>:18
    let addContent = {
        name:'LIN',
        age:18
    }
    const insert = new infoModel();
    insert.name = addContent.name;
    insert.age = addContent.age;
    insert.save(function(err,data){
        if(err){
            res.send("添加异常");
        }else{
            console.log("添加成功");
            res.send(data);
        }
    });
})

 2. 测试运行,浏览器输入:http://127.0.0.1:3000/save

 改

        通过请求url 往数据库里修改文档操作;修改一条文档内容 <name:LIN ,age:18 > 修改文档内容为 <name : ZEN ,age : 18 >;

1. 代码编写

/* 改 */ 
router.get('/update',function(req,res){
    // 更新文档 —— <name>:ZEN <age>:18
    let updateContent = {
        name:'ZEN',
        age:18
    }
    // 更新条件
    let querys = {
        name:'LIN',
        age:18
    }

    infoModel.updateOne(querys,updateContent,function(err){
        if(err){
            console.log("修改异常");
        }else{
            console.log("修改成功");
            res.send("{ updated : 1 , message : success }");
        }
    })
})

 2. 测试运行,浏览器输入:http://127.0.0.1:3000/update

 删

         通过请求url 往数据库里删除文档操作;删除一条文档内容 _id:6397db88b11c6ecf96f07d2e

 1. 代码编写 

/* 删 */ 
router.get('/del/:id',async function(req,res){
    // 根据id来删除数据(id是唯一标识);
    console.log("id:"+ req.params.id);
    const doc = await infoModel.findById(req.params.id);
    await doc.remove(function(err){
        if(err){
            res.send("删除异常");
        }else{
            console.log("删除成功");
            res.send("{ delete : 1 , message : success }");
        }
    })
})

  2. 测试运行,浏览器输入:http://127.0.0.1:3000/del/输入删除的_id

        以上就是本篇的全部内容了,通过Express框架连接MongoDB数据以及进行集合中文档的增删查改操作,搭配可视化工具使用可以方便快捷的来查询数据的变化;感谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】第十一部分 SELECT的执行过程

【MySQL】第十一部分 SELECT的执行过程 文章目录【MySQL】第十一部分 SELECT的执行过程11. SELECT的执行过程11.1 SQL92语法的结构11.2 SQL92语法的结构11.3 语句执行顺序11.4 解释之前遗留问题总结11. SELECT的执行过程 11.1 SQL92语法的结构 SELECT ... FROM TABLE WHERE 多…

STM32G431—ADC+E2PROM读写实验

目录 1.ADC介绍 配置cubemx 代码 2.IIC 通信 原理图 AT24C02 代码 i2C.c 主函数 1.ADC介绍 ADC 有多达 18 个转换通道&#xff0c;其中通道 0~通道 15 是外部通道&#xff0c;使用的 GPIO 引脚如表 所示。 ADC引脚GPIO引脚GPIO配置ADC引脚GPIO引脚GPIO配置IN0PA0模拟输…

Aspose.PDF for .NET提取矢量图像的支持

Aspose.PDF for .NET提取矢量图像的支持 增加了对提取矢量图像的支持。 改进了PDF到Microsoft Excel的转换。 添加了对创建“PrinterMark”批注的支持。 增加了检测PDF文件是否包含矢量图形的功能。 Aspose.PDF for.NET是一个高级PDF处理和解析API&#xff0c;用于在跨平台应用…

Linux常用命令——setsid命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setsid 在新的会话中运行程序。 补充说明 setsid命令子进程从父进程继承了&#xff1a;SessionID、进程组ID和打开的终端。子进程如果要脱离这些&#xff0c;代码中可通过调用setsid来实现。&#xff0c;而命令…

C#中的基本概念(类_对象_属性_方法)

C#中的基本概念(类_对象_属性_方法) 对象的概念: 任何存在的实体都是对象,对象是真实存在的, 它包括“静态特征”和“动态特征” 对象包含2个方面: 静态特征:表示对象的属性,用来存储对象本身的数据 动态特征(行为):表示对象的方法,用来说明对象能做什么 例如: 一…

云服务器部署Node.js前后端分离项目

云服务器部署Node.js 前后端分离项目 准备工作 1.拥有一台服务器 自行选择阿里云&#xff0c;腾讯云… 2.重装系统 以腾讯云为例&#xff0c;安装centos 7.6系统 重置一下密码 3.使用远程管理工具 以宝塔工具为例,添加连接 4.安装宝塔面板 宝塔面板 - 简单好用的Linux…

基于ImageAI的图像识别

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

每日学术速递1.25

CV - 计算机视觉 今天带来的是北航IRIP实验室被国际计算机视觉与模式识别会议CVPR 2022接收的6篇论文。 CVPR是由IEEE主办的计算机视觉、模式识别及人工智能等领域最具影响力和最重要的国际顶级会议。CVPR官网显示&#xff0c;此次会议有超过8161篇的大会论文投稿&#xff0c;…

测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法

目录一、测试用例的万能公式二、对登录页面设计测试用例三、测试用例的设计方法3.1 基于需求的设计方法3.2 等价类3.3 边界值3.4 判定表3.5 正交排列3.6 场景设计法3.7 错误猜测法四、面试真题一、测试用例的万能公式 首先&#xff0c;为"水杯"设计一个测试用例&…

计算机网络基础(二)

文章目录1. 应用层1.1 定制应用层协议1.2 网络版计算器实现1.3 应用层细分1.4 HTTP协议1.4.1 认识网址(URL)1.4.2 HTTP协议简易了解1.4.3 简易版HTTP服务器1.4.4 HTTP请求报文详解1.4.5 响应报文1.4.6 HTTP的一些安全问题1.5 HTTPS协议1.5.1 HTTPS和SSL/TLS1.5.2 短链接和长链接…

【Java|golang】1802. 有界数组中指定下标处的最大值---双指针

给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length n nums[i] 是 正整数 &#xff0c;其中 0 < i < n abs(nums[i] - nums[i1]) < 1 &#xff0c;其中 0 &l…

2023年最新Python常见编程面试题(1)精选30个题目附答案

2023年最新Python面试题&#xff08;1&#xff09;之基础篇精选1.统计字符串中字符出现的次数2.获取字典key值键中小写字母对应键值对3.将字典中key变小写4.更改字典value值5.将cookies变成字典形式6.有如下字符串username把它转换成为UserName7.分别求出奇数和偶数把奇数偶数存…

NLP | 打造一个‘OpenAI智能’机器人,只需要五分钟

借用openai api,做一个聊天机器人&#xff0c;别去openai主页啦~Step 1.登录OpenAI账号网站&#xff1a;Overview - OpenAI APIStep 2.生成API key点击右上角的个人个人账户-> 点击 View API keys点击生成一个秘钥&#xff08;Create new secret key&#xff09;,并且复制St…

GameFrameWork框架(Unity3D)使用笔记(九) AssetBundle和游戏打包

目录 前言&#xff1a; 整个流程&#xff1a; 一、配置路径 二、打包 三、初始化资源 四、测试打包 前言&#xff1a; 如果使用了GameFrameWork框架的话&#xff0c;你会发现你点击Build And Run按钮打包运行大概是运行不起来的。本篇就讲了怎么打包游戏运行。 我觉得我对…

什么是YOLOR?

简述YOLOR 是一种用于对象检测的最先进的机器学习算法&#xff0c;与 YOLOv1-YOLOv5 不同&#xff0c;原因在于作者身份、架构和模型基础设施的差异。YOLOR 代表“你只学习一种表示”&#xff0c;不要与 YOLO 版本 1 到 4 混淆&#xff0c;其中 YOLO 代表“你只看一次”。 YOLO…

Docker的常用命令

文章目录 目录 文章目录 前言 一、帮助命令 二、镜像命令 1.查看镜像 2.搜索镜像 3.下载镜像 4.删除镜像 三、容器命令 1.启动容器 2.查看容器 3.退出容器 4.删除容器 5.启动和停止容器 四、常用的其它命令 后台运行 查看日志 查看容器中进程的信息 查看镜像的元数据…

lego-loam学习笔记(一)

前言&#xff1a; 主要记录配置编译lego-loam源码时遇到的问题和解决的方法。 系统&#xff1a;ubuntu18.04 一、安装gtsam 因为系统是18.04所以不需要作很大的更改&#xff0c;按照官网的doc一步一步的来就行了。 根据官网&#xff1a; GitHub - RobustFieldAutonomyLab…

DlhSoft Gantt Chart Light Library自定义的网格列

DlhSoft Gantt Chart Light Library自定义的网格列 Improved the loading of Microsoft Project XML files and the exporting of images from ScheduleChartDataGrid.Added new TotalResourceEffort and TotalResourceCompletedEffort properties to compute the real effort …

MySQL数据库数据动态监控(canal+Kafka)

参考资料: 参考文章https://gper.club/articles/7e7e7f7ff3g59gc6g6d canal官网 https://github.com/alibaba/canal

JavaWeb项目中添加live2d模型

前言&#xff1a;之前个人博客中配置的live2d模型的API失效了&#xff0c;所以重新折腾了一下&#xff0c;在自己服务器配置了 live2d 的 API&#xff0c;在此记录一下 JavaWeb项目中添加live2d模型 之前在个人博客中使用的 live2d 模型一直用的是网上一个大佬免费提供的 API …