nodeJs+Mongodb+mongoose入门

news2024/11/19 15:34:13

nodeJs+express+Mongodb+mongoose+Navicat

自我记录

一、简介

1.1 Mongodb 是什么

MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/

1.2 数据库是什么

数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序

1.3 数据库的作用

数据库的主要作用就是 管理数据 ,对数据进行 增(c)、删(d)、改(u)、查(r)

1.4 数据库管理数据的特点

相比于纯文件管理数据,数据库管理数据有如下特点:

  1. 速度更快
  2. 扩展性更强
  3. 安全性更强

1.5 为什么选择 Mongodb

操作语法与 JavaScript 类似,容易上手,学习成本低

二、核心概念

Mongodb 中有三个重要概念需要掌握
数据库(database) 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存
放很多集合
集合(collection) 集合类似于 JS 中的数组,在集合中可以存放很多文档
文档(document) 文档是数据库中的最小单位,类似于 JS 中的对象

三、下载安装与启动

下载地址:https://www.mongodb.com/try/download/community
我选择的是 5.0.21 版本
建议选择zip类型, 通用性更强
配置步骤如下:
1> 将压缩包移动到 C:\Program Files 下,然后解压
2> 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
3> 以 mongodbbin 目录作为工作目录,启动命令行
4> 运行命令 mongod
在这里插入图片描述

看到最后的waiting for connections则表明服务 已经启动成功
然后可以使用 mongo 命令连接本机的 mongodb 服务
在这里插入图片描述

注意:
为了方便后续方便使用 mongod 命令,可以将 bin 目录配置到环境变量 Path
千万不要选中服务端窗口的内容 ,选中会停止服务,可以 敲回车 取消选中

四、命令行交互

命令行交互一般是学习数据库的第一步,不过这些命令在后续用的比较少,所以大家了解即可

4.1 数据库命令

  1. 显示所有的数据库
    show dbs
    
  2. 切换到指定的数据库,如果数据库不存在会自动创建数据库
    use 数据库名
    
  3. 显示当前所在的数据库
    db
    
  4. 删除当前数据库
    use 库名
    db.dropDatabase()
    

4.2 集合命令

  1. 创建集合
    db.createCollection('集合名称')
    
  2. 显示当前数据库中的所有集合
    show collections
    
  3. 删除某个集合
    db.集合名.drop()
    
  4. 重命名集合
    db.集合名.renameCollection('newName')
    

4.3 文档命令

  1. 插入文档

    db.集合名.insert(文档对象);
    
  2. 查询文档

    db.集合名.find(查询条件);
    

    _id 是 mongodb 自动生成的唯一编号,用来唯一标识文档

  3. 更新文档

    db.集合名.update(查询条件,新的文档)
    db.集合名.update({name:'张三'},{$set:{age:19}})
    
  4. 删除文档

    db.集合名.remove(查询条件)
    

4.4 应用场景

4.4.1 新增

用户注册
发布视频
发布商品
发朋友圈
发评论
发微博
发弹幕

4.4.2 删除

删除评论
删除商品
删除文章
删除视频
删除微博

4.4.3 更新

更新个人信息
修改商品价格
修改文章内容

4.4.4 查询

商品列表
视频列表
朋友圈列表
微博列表
搜索功能

五、Mongoose

5.1 介绍

Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/

5.2 作用

方便使用代码操作 mongodb 数据库

5.3 使用流程

5.3.1 运行MongoDB

按照三去下载并运行 mongodmongo

C:\Program Files\MongoDB\Server\5.0\bin>mongod
C:\Program Files\MongoDB\Server\5.0\bin>mongo

5.3.2 初始化项目 package.json

npm init 

nodemon 没有的话要全局安装一下
官网地址: https://nodemon.io/
github地址:https://github.com/remy/nodemon/

npm i -g nodemon

并配置命令 dev & serve

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
+    "dev": "nodemon ./app.js",
+    "serve": "node ./app.js"
  },
  "author": "",
  "license": "ISC"
}

5.3.3 运行并简单使用

在 app.js

// 1.安装 mongoose
// 2.导入 mongoose
const mongoose = require("mongoose");
// 3.链接  mongodb 服务                      test 数据库的名称
mongoose.connect("mongodb://127.0.0.1:27017/test");

// 5. 创建文档的结构对象
// 设置集合中 文档的属性 以及类型值
let BookSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true, // 必填
        unique: true // 独一无二 新集合才可以
    },
    author: {
        type: String,
        default: '匿名' // 默认值
    },
    gender: {
        type: String,
        enum: ['男', '女'] // 枚举 必须是里面的内容  
    },
    price: Number,
    is_hot: Boolean,
    // tag: Array,
    // pub_time: Date,
});
// 6.创建模型对象 : mongoose 会使用集合的复数去创建集合
let BookModel = mongoose.model("books", BookSchema);
const createBook = async () => {
    try {
        // 7.新增
        const data = await BookModel.create({
            name: '红楼梦1',
            author: '张三',
            gender: '男',
            price: 99,
            is_hot: true,
            // tag: ['法律', '大佬'],
            // pub_time: new Date()
        })
        console.log(data);
        // 8.关闭数据库连接 项目运行中不会添加该代码
        mongoose.disconnect()
    } catch (err) {
        // 处理错误
        console.error('Error creating user:', err);
        return
    }

}
// 单条删除
const delBook = async () => {
    // 删除
    try {
        const data = await BookModel.deleteOne({ _id: '650cff4da98f11a93e431184' })
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('单条删除失败');
            return;
        }
    }
};
// 批量删除
const dellManyBook = async () => {
    // 批量删除
    try {
        const data = await BookModel.deleteMany({ is_hot: true })
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('批量删除失败');
            return;
        }
    }
};
// 单条更新
const updateBook = async () => {
      // 删除
      try {
        const data = await BookModel.updateOne({ name: '红楼梦' },{price:990})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('更新失败');
            return;
        }
    }
}
// 批量更新
const updateManyBook = async () => {
    // 批量更新
    try {
      const data = await BookModel.updateMany({ is_hot: false },{price:9.9})
      console.log(data);
      mongoose.disconnect()
  } catch (err) {
      if (err) {
          console.log('批量更新失败');
          return;
      }
  }
}
// 单条读取
const findBook = async () => {
    try {
        const data = await BookModel.findOne({ name: '法外狂徒' })
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('单条读取失败');
            return;
        }
    }
};
// ID读取
const findIDBook = async () => {
    try {
        const data = await BookModel.findById('650d01e4761830fc4b8d21e7')
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('单条ID读取失败');
            return;
        }
    }
};
// 批量读取 or 读取所有
const findManyBook = async () => {
    try {
        // const data = await BookModel.find({price: 9.9})
        const data = await BookModel.find()
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('批量读取 or 读取所有失败');
            return;
        }
    }
};
// 条件读取
/**
 * @findRuleBook 条件读取
 * @$gt : >
 * @$lt : <
 * @$gte : >=
 * @$lte : <=
 * @$ne : !==
 * @$or : ||
 * @$and : &&
 */
const findRuleBook = async () => {
    try {
        // // < 9.9的
        // const data = await BookModel.find({price: {$lt:9.9}})
        // // 名字是 法外狂徒 或者 价格是 99的
        // const data = await BookModel.find({$or:[{name:'法外狂徒'},{price:99}]})
        // // > 9.9 && < 990
        // const data = await BookModel.find({ $and: [{ price: {$gt:9.9 } },{price:{$lt:990}}]})
        // // 正则表达式检索 带有 '1' 的名字 或者 new RegExp('1')
        const data = await BookModel.find({name:/1/})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('条件读取失败');
            return;
        }
    }
};
// 个性化读取-设置字段形式
const findSelectBook = async () => {
    try {
        // 只要name 和 author字段 (id:0 不写的话默认返回id)
        const data = await BookModel.find().select({ name:1,author:1,_id:0})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('个性化读取失败');
            return;
        }
    }
};
// 个性化读取-数据排序
const findSortBook = async () => {
    try {
        // sort({price:-1}) -1 为倒叙 1为正序 也可以配合select使用
        const data = await BookModel.find().select({ name:1,price:1,_id:0}).sort({price:-1})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('个性化读取失败');
            return;
        }
    }
};
// 个性化读取-数据截取
/**
 * @findSkipLimitBook 数据截取
 * @skip 跳过
 * @limit 限定
 */
const findSkipLimitBook = async () => {
    try {
        // skip(1) 跳过第一个 limit(2)取两个
        const data = await BookModel.find().skip(1).limit(2).select({ name:1,price:1,_id:0}).sort({price:-1})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('个性化读取失败');
            return;
        }
    }
};
// 4.设置回调
// 连接成功的回调
const db = mongoose.connection;
db.once("open", () => {

    console.log("成功");
    // createBook()
    // delBook()
    // dellManyBook()
    // updateBook()
    // updateManyBook()
    // findBook()
    // findIDBook()
    // findManyBook()
    // findRuleBook()
    // findSelectBook()
    // findSortBook()
    findSkipLimitBook()
});
// 连接出错的回调
db.on("error", () => {
    console.log("失败");
});
// 连接关闭的回调
db.on("close", () => {
    console.log("关闭");
});

5.4 优化 - 模块化使用

5.4.1 同级新建 db/db.js 抽离公共的连接

/**
 * 
 * @param {*} success 数据库链接成功的回调
 * @param {*} error 数据库链接失败的回调
 */
module.exports = function (success, error) {
    // 判断 error回调 并设置默认值
    if (typeof error !== 'function') {
        error = () => {
            console.log('连接失败');
        }
    }
    // 1.安装 mongoose
    // 2.导入 mongoose
    const mongoose = require("mongoose");
    // 导入配置文件
    const {DBHOST,DBPORT,DBNAME} = require('../config/config')
    // 3.链接  mongodb 服务                      DBNAME 数据库的名称
    mongoose.connect(`mongodb://${DBHOST}:${DBPORT}/${DBNAME}`);

    // 4.设置回调
    // 连接成功的回调
    const db = mongoose.connection;
    // 连接成功的回调 once 只执行一次  事件回调函数只会执行一次
    db.once("open", () => {
        success();
    });

    // 连接出错的回调
    db.on("error", () => {
        error();
    });
    // 连接关闭的回调
    db.on("close", () => {
        console.log("连接关闭");
    });
}

5.4.2 同级新建 models/BookModel.js 抽离公共的文档的结构对象和集合

// 导入 mongoose
const mongoose = require('mongoose')

// 5. 创建文档的结构对象
// 设置集合中 文档的属性 以及类型值
let BookSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true, // 必填
        unique: true // 独一无二 新集合才可以
    },
    author: {
        type: String,
        default: '匿名' // 默认值
    },
    gender: {
        type: String,
        enum: ['男', '女'] // 枚举 必须是里面的内容  
    },
    price: Number,
    is_hot: Boolean,
    // tag: Array,
    // pub_time: Date,
});
// 6.创建模型对象 : mongoose 会使用集合的复数去创建集合
let BookModel = mongoose.model("books", BookSchema);

// 暴露模型对象
module.exports = BookModel

5.4.3 同级新建 config/config.js 提取公共的配置文件

// 配置文件
module.exports = {
    DBHOST: '127.0.0.1',
    DBPORT: '27017',
    DBNAME: 'test'
}

5.4.4 最后同级的 app.js 使用

// 导入db文件
const db = require('./db/db')
// 导入 mongoose
const mongoose = require('mongoose')
// 导入 BookModel
const BookModel = require('./models/BookModel')
// 调用函数
db(() => { 
    console.log('连接成功');
    // createBook()
    // delBook()
    // dellManyBook()
    // updateBook()
    // updateManyBook()
    // findBook()
    // findIDBook()
    // findManyBook()
    // findRuleBook()
    // findSelectBook()
    // findSortBook()
    findSkipLimitBook()
})


const createBook = async () => {
    try {
        // 7.新增
        const data = await BookModel.create({
            name: '红楼梦1',
            author: '张三',
            gender: '男',
            price: 99,
            is_hot: true,
            // tag: ['法律', '大佬'],
            // pub_time: new Date()
        })
        console.log(data);
        // 8.关闭数据库连接 项目运行中不会添加该代码
        mongoose.disconnect()
    } catch (err) {
        // 处理错误
        console.error('Error creating user:', err);
        return
    }

}
// 单条删除
const delBook = async () => {
    // 删除
    try {
        const data = await BookModel.deleteOne({ _id: '650cff4da98f11a93e431184' })
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('单条删除失败');
            return;
        }
    }
};
// 批量删除
const dellManyBook = async () => {
    // 批量删除
    try {
        const data = await BookModel.deleteMany({ is_hot: true })
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('批量删除失败');
            return;
        }
    }
};
// 单条更新
const updateBook = async () => {
      // 删除
      try {
        const data = await BookModel.updateOne({ name: '红楼梦' },{price:990})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('更新失败');
            return;
        }
    }
}
// 批量更新
const updateManyBook = async () => {
    // 批量更新
    try {
      const data = await BookModel.updateMany({ is_hot: false },{price:9.9})
      console.log(data);
      mongoose.disconnect()
  } catch (err) {
      if (err) {
          console.log('批量更新失败');
          return;
      }
  }
}
// 单条读取
const findBook = async () => {
    try {
        const data = await BookModel.findOne({ name: '法外狂徒' })
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('单条读取失败');
            return;
        }
    }
};
// ID读取
const findIDBook = async () => {
    try {
        const data = await BookModel.findById('650d01e4761830fc4b8d21e7')
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('单条ID读取失败');
            return;
        }
    }
};
// 批量读取 or 读取所有
const findManyBook = async () => {
    try {
        // const data = await BookModel.find({price: 9.9})
        const data = await BookModel.find()
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('批量读取 or 读取所有失败');
            return;
        }
    }
};
// 条件读取
/**
 * @findRuleBook 条件读取
 * @$gt : >
 * @$lt : <
 * @$gte : >=
 * @$lte : <=
 * @$ne : !==
 * @$or : ||
 * @$and : &&
 */
const findRuleBook = async () => {
    try {
        // // < 9.9的
        // const data = await BookModel.find({price: {$lt:9.9}})
        // // 名字是 法外狂徒 或者 价格是 99的
        // const data = await BookModel.find({$or:[{name:'法外狂徒'},{price:99}]})
        // // > 9.9 && < 990
        // const data = await BookModel.find({ $and: [{ price: {$gt:9.9 } },{price:{$lt:990}}]})
        // // 正则表达式检索 带有 '1' 的名字 或者 new RegExp('1')
        const data = await BookModel.find({name:/1/})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('条件读取失败');
            return;
        }
    }
};
// 个性化读取-设置字段形式
const findSelectBook = async () => {
    try {
        // 只要name 和 author字段 (id:0 不写的话默认返回id)
        const data = await BookModel.find().select({ name:1,author:1,_id:0})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('个性化读取失败');
            return;
        }
    }
};
// 个性化读取-数据排序
const findSortBook = async () => {
    try {
        // sort({price:-1}) -1 为倒叙 1为正序 也可以配合select使用
        const data = await BookModel.find().select({ name:1,price:1,_id:0}).sort({price:-1})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('个性化读取失败');
            return;
        }
    }
};
// 个性化读取-数据截取
/**
 * @findSkipLimitBook 数据截取
 * @skip 跳过
 * @limit 限定
 */
const findSkipLimitBook = async () => {
    try {
        // skip(1) 跳过第一个 limit(2)取两个
        const data = await BookModel.find().skip(1).limit(2).select({ name:1,price:1,_id:0}).sort({price:-1})
        console.log(data);
        mongoose.disconnect()
    } catch (err) {
        if (err) {
            console.log('个性化读取失败');
            return;
        }
    }
};

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

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

相关文章

KF32A学习笔记(一):工程导入、编译烧录方法(KF32 IDE+ KF32 PRO)

目录 概述KF32 IDE打开现有项目工程1.工程导入2.编译工程3.下载程序 KF32 PRO 概述 本文主要是对KF32A150芯片程序的编译、烧录方法进行说明。针对开发过程中的编译烧录和无代码情况下的烧录两种场景&#xff0c;需要安装ChipON PRO KF32和ChipON IDE KF32两个上位机工具&…

Linux Qt5.15.2 编译QWebEngine源码支持音视频H264

背景 默认自带的QWebEngine 因版权问题不支持音视频功能&#xff0c;需要自己编译源码以支持。 平台&#xff1a;Linux&#xff08;UOS V20 1050&#xff09; Qt&#xff1a;5.15.2 准备工作 下载 Qt 5.15.2 对应版本源码&#xff0c;使用镜像网站或者Qt Maintenance Tool工…

MyCat主从数据库集群搭建

1 背景 最近工作需要对比几种数据库技术方案&#xff0c;主从读写分离集群也是其中之一。接着上一篇文章《MySQL主从数据库搭建》基础上继续搭建MyCat主从集群。 2 MyCat 什么是MyCat?MyCat是数据库中间件&#xff0c;就是介于数据库和应用之间&#xff0c;进行数据处理与交互…

易点易动库存管理系统:引领库存用量控制新时代,助力企业节约成本

在现代企业经营中&#xff0c;库存管理一直是一个关键的环节。过多的库存会造成资金占用和浪费&#xff0c;而过少的库存则容易导致生产中断和客户满意度下降。为了解决这一难题&#xff0c;易点易动库存管理系统应运而生。 一、全面的库存数据管理 易点易动库存管理系统通过与…

AP5193 DC-DC恒流转换器 消防应急 灯汽车灯 应急日光灯太阳能灯驱动IC

AP5193是一款PWM工作模式,高效率、外围简单、 内置功率MOS管&#xff0c;适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。电流2.5A。AP5193可实现线性调光和PWM调光&#xff0c;线性调光 脚有效电压范围0.55-2.6V. AP5193 工作频率可以通过RT 外部电阻编程来设定&#xff0c…

融云观察:AI Agent 是不是游戏赛道的下一个「赛点」?

本周四 融云直播间&#xff0c;点击报名~ ChatGPT 的出现&#xff0c;不仅让会话成为了未来商业的基本形态&#xff0c;也把大家谈论 AI 的语境从科技产业转向了 AI 与全产业的整合。 关注【融云全球互联网通信云】了解更多 而目前最热衷于拥抱生成式 AI 的行业中&#xff0c…

Springboot整合之Shiro和JWT技术实现无感刷新

一、Shiro简介 Shiro是Java领域非常知名的认证&#xff08; Authentication &#xff09;与授权 &#xff08; Authorization &#xff09;框架&#xff0c;用以替代JavaEE中的JAAS功能。相 较于其他认证与授权框架&#xff0c;Shiro设计的非常简单&#xff0c;所以广受好 评。…

互联网架构演进方向

目录 1 业务架构1.1 单体模式1.2 中台战略1.2.1 概述1.2.2 背景1.2.3 案例 1.3 总结与思考 2 数据架构2.1 单数据库2.2 主从读写2.3 分库分表2.4 高速缓存2.5 数据多样化2.5.1 分布式文件2.5.2 nosql2.5.3 搜索引擎2.5.4 架构特点 3、应用架构3.1 单机调优3.2 动静分离3.3 分布…

【李沐深度学习笔记】矩阵计算(2)

课程地址和说明 线性代数实现p4 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 本节是第二篇 矩阵计算 矩阵的导数运算 此处参考了视频&#xff1a;矩阵的导数运算 为了方便看出区别&#xff0c;我将所有的向量…

MQ - 21 可观测性_消息轨迹功能的设计

文章目录 导图概述丢消息是怎么回事?消息的唯一标识唯一 ID 的生成方式消息轨迹的设计应该注意什么?消息轨迹的实现方案设计客户端轨迹数据记录服务端轨迹数据记录本地文件内置 Topic (推荐)第三方服务单机维度的存储引擎结论持久存储引擎的选择RabbitMQ 消息轨迹方案设计实…

基于时序分析及约束(1)-时序约束是什么?

首先回答标题的问题&#xff1a; 时序约束是什么&#xff1f; 简单来讲&#xff0c;时序约束就是你要告诉综合工具&#xff0c;你的标准是什么。 综合工具应该如何根据你的标准来布线&#xff0c;以满足所以寄存器的时序要求。 为什么要做时序约束&#xff1f; 这里引用特权同…

Linux 入门:基本指令

本篇文章来介绍我们在初学Linux时可以会碰倒的一些基本指令&#xff0c;让我们对这些指令有一个基本的了解。 目录 01. ls 指令 02. pwd 命令 03. cd 指令 04. touch 指令 05. mkdir 指令&#xff08;重要&#xff09; 06. rmdir指令 && rm 指令&#xff08;重…

基于Yolov8的工业小目标缺陷检测(4):SPD-Conv,低分辨率图像和小物体涨点明显

💡💡💡本文改进:SPD-Conv,处理低分辨率图像和小物体等更困难的任务时效果明显。 SPD-Conv | 亲测在工业小目标缺陷涨点明显,原始mAP@0.5 0.679提升至0.775 收录专栏: 💡💡💡深度学习工业缺陷检测 :http://t.csdn.cn/fVSgs ✨✨✨提供工业缺陷检测性能提升…

uniapp 内容展开组件

uni-collapse折叠面板并不符合需求&#xff0c;需要自己写一个。 效果展示&#xff1a; 代码&#xff1a; &#xff08;vue3版本&#xff09; <template><view class"collapse-view"><view class"collapse-content"><swiper:autopl…

海外代理IP是什么?如何使用?

一、海外代理IP是什么&#xff1f; 首先&#xff0c;代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器&#xff0c;被称为“中介”&#xff0c;因为它位于最终用户和他们在线访问的网页之间。 海外IP代理是就是指从海外地区获取的IP地址&#xff0c;用…

YashanDB荣获“鼎新杯”数字化转型应用奖项

近日&#xff0c;深算院YashanDB 团队与深燃集团联合共建的深圳燃气集团数据库国产化建设项目&#xff0c;荣获第二届“鼎新杯”数字化转型应用大赛信息技术应用创新赛道二等奖&#xff01;此次获奖&#xff0c;彰显了崖山数据库系统YashanDB自主领先的国产数据库技术优势和优秀…

ZABBIX 6.4安装部署

ZABBIX 6.4安装部署 zabbix的主要组成&#xff1a; 1、Zabbix Server6.4&#xff1a;Zabbix 服务端&#xff0c;是 Zabbix 的核心组件。它负责接收监控数据并触发告警&#xff0c;还负责将监控数据持久化到数据库中。 2、Zabbix Agent&#xff1a;Zabbix 客户端&#xff0c;部…

好用的一站式MES系统有哪些?全面管理生产流程,实现工厂数字化转型

在现代制造业中&#xff0c;MES制造执行系统已经成为了不可或缺的信息化工具。它为企业建立了规范化、集成化的生产信息管理平台&#xff0c;通过集成管理思想&#xff0c;帮助企业优化流程管控、数字化生产车间&#xff0c;从而显著提升了生产效率。那么&#xff0c;MES系统到…

SpringBoot+Vue项目中session改变的问题解决

一&#xff0c;发现问题 项目是SpringbootVue的前后端分离项目&#xff0c;没有什么特殊的配置。在登录之后&#xff0c;会以sessionId为key存在httpSession中&#xff0c;然后后续请求就会现在Filter中看是否在HttpSession中查询到数据&#xff0c;如果查到才继续&#xff0c…

目前很火的养猫微信小程序源码带流量主+搭建教程

目前很火的养猫微信小程序源码带流量主搭建教程。 搭建教程 进入小程序我们下载开发者工具 开发者工具安装好了 我们就把前端源码导入进开发者工具中 这里的APPID我们填写自己的小程序APPID 修改siteinfo.js里的uniacid和acid 这两个ID在刚才后端添加的小程序那里看 在把…