MongoDB的简单使用
MongoDB(文档数据库)的简单使用
MongoDB最好的学习资料就是他的官方文档:SQL 到 MongoDB 的映射图表 - MongoDB 手册 v8.0
1.MongoDB CRUD操作
1.1Insert操作
基本方法:
|
|
注意:插入操作针对的是单个集合。MongoDB 中的所有写入操作在单个文档级别都具有原子性。
示例:
1.2Select操作
基本方法:
|
示例:
1.3Update操作
基本方法:
|
|
|
在 MongoDB 中,更新操作针对的是单个集合。MongoDB 中的所有写入操作在单个文档级别都具有原子性。
示例:
1.4Delete操作
基本方法:
|
|
在 MongoDB 中,删除操作针对的是单个集合。MongoDB 中的所有写入操作在单个文档级别都具有原子性。
示例:
2.MongoDB 分片
2.1概念
分片是一种跨多台机器分布数据的方法。MongoDB 使用分片来支持超大数据集和高吞吐量操作的部署。
存在大型数据集或高吞吐量应用程序的数据库系统可能对单个服务器的容量构成挑战。例如,较高的查询速率可能会耗尽服务器的 CPU 容量。大于系统 RAM 的工作集大小会对磁盘驱动器的 I/O 容量造成压力。
因此,有两种方法可解决系统增长问题:垂直扩展和水平扩展。
(1)Vertical Scaling(垂直扩展)涉及增大单个服务器的容量,例如使用更强大的 CPU、添加更多 RAM 或增加存储空间量。可用技术所存在的限制可能会导致单个机器对给定工作负载来说不够强大。此外,基于云的提供商存在基于可用硬件配置的硬上限。因此,垂直扩展存在实际的最大值。
(2)Horizontal Scaling(横向(水平)扩展)涉及将系统数据集和负载划分到多个服务器,以及按需增加服务器以提高容量。虽然单个机器的总体速度或容量可能不高,但每个机器均可处理总体工作负载的一部分,因此可能会比单个高速、高容量服务器提供更高的效率。扩展部署的容量只需按需添加额外的服务器,而这可能会比单个机器的高端硬件的整体成本更低。但代价在于它会增大部署的基础设施与维护的复杂性。
MongoDB 支持通过分片进行水平扩展。
2.2分片集群
描述了分片集群内各组件之间的交互:
MongoDB分片集群由以下组件构成:
(1)分片:每个分片都包含分片数据的一个子集。
(2)mongos:mongos
充当查询路由器,在客户端应用程序和分片集群之间提供接口。
(3)配置服务器:配置服务器会存储集群的元数据和配置设置。配置服务器必须部署为副本集 (CSRS)。
综上所述:一个基本的Mongodb集群需要配置MASTER节点-SLAVE节点-路由节点-仲裁节点。
2.3分片键/数据段
2.3.1分片键
作用:MongoDB 使用分片键在分片之间分发集合的文档。 分片键由文档中的一个或多个字段组成。
分片集合中的文档可能缺少分片键字段。跨分片分发文档时,缺少的分片键字段将视为具有 null 值,但在路由查询时则不会。
注意:
-
从在MongoDB 5.0 开始,您可以通过更改集合的分片键对集合重新分片。
-
您可以通过向现有分片键添加后缀字段或字段来优化分片键。
(1)分片键索引
要对已填充的集合进行分片,该集合必须具有以分片键开头的索引。对空集合进行分片时,如果该集合还没有指定分片键的适当索引,MongoDB 会创建支持索引。请参阅分片键索引。
(2)分片键策略
分片键的选择会影响分片集群的性能、效率和可扩展性。 具有最佳硬件和基础架构的集群可能会因为选择分片键而遇到瓶颈。 分片键及其后备索引的选择也会影响集群可以使用的分片策略。
2.3.2数据段
MongoDB 将数据分片为数据段。每个数据段都有一个基于分片键、包含下限且不包含上限的范围。
2.3.3负载均衡器和均匀数据分布
为了实现数据在集群中所有分片上的均匀分布,负载均衡器会在后台运行,以便在各分片之间迁移范围。
2.4分片的优点
(1)读取/写入
MongoDB 在分片集群中的分片之间分配读写工作负载,支持每个分片处理集群操作的子集。通过添加更多的分片,读写工作负载都可以在集群中横向扩展。
对于包含分片键或复合分片键前缀的查询,mongos 可将查询定向到特定分片或一组分片。这些有针对性的操作通常比向集群中的每个分片进行广播更为有效。
(2)存储容量
分片将数据分布在集群中的分片上,从而允许每个分片包含整个集群数据的子集。随着数据集的增长,更多的分片会增加集群的存储容量。
(3)高可用性
按副本集部署配置服务器和分片,可提高可用性。
即使一个或多个分片副本集变为完全不可用,分片集群仍可继续执行部分读取和写入操作。换言之,即便无法访问不可用分片上的数据,针对可用分片的读取或写入仍可成功完成。
注意:
需要对分片集群基础架构的需求和复杂性进行仔细规划、执行和维护。
虽然您可在后续对集合重新分片,但请务必仔细考虑分片键的选择,以免出现可扩展性与性能问题。
3.SQL到MongoDB的映射表
下表列出各种SQL术语和概念以及相应的MongoDB术语和概念
传统关系型数据库中SQL术语/概念 | NoSQL型MongoDB数据库术语/概念 |
database | database |
数据表(table) | 集合(collection) |
行 | 文档或BSON文档 |
列 | 字段 |
索引(index) | 索引(index) |
表连接 | $lookup,嵌入式文档 |
主键 | 主键 |
指定任何唯一列或列组合作为主键 | 在MongoDB中,主键会自动设置为_id字段 |
聚合(例如分组依据) | 聚合管道(请参阅 SQL 聚合映射图表) |
SELECT INTO NEW_TABLE | $out( 请参阅SQL 聚合映射图表) |
MERGE INTO TABLE | $merge(请参阅 SQL 聚合映射图表) |
UNION ALL | $unionWith |
事务 | 事务(在许多场景中,非规范化数据模型(嵌入式文档和数组),而不是多文档事务,将继续是数据和使用案例的最佳选择。换言之,对于许多场景,适当地建模数据将最大限度地减少对多文档事务的需求) |
3.1可执行程序的对比
Mongodb | MySQL | Oracle | |
数据库服务 | mongod | mysqld | oracle |
数据库客户端 | mongosh | mysql | sqlplus |
4.SQL语句之间的对比
如下代码表示在MongoDB中的一个集合中一条数据记录的状态;
示例:
{_id: ObjectId("509a8fb2f3f4948bd2f983a0"),user_id: "abc123",age: 55,status: 'A'
}
4.1创建和更改
下表列出了与表级动作相关的各种SQL语句以及对应的MongoDB语句。
(1)SQL模式语句
创建表:
CREATE TABLE people (id MEDIUMINT NOT NULLAUTO_INCREMENT,user_id Varchar(30),age Number,status char(1),PRIMARY KEY (id)
)
修改表:
ALTER TABLE people
ADD join_date DATETIME
ALTER TABLE people
DROP COLUMN join_date
创建索引:
CREATE INDEX idx_user_id_asc
ON people(user_id)
CREATE INDEXidx_user_id_asc_age_desc
ON people(user_id, age DESC)
删除表:
DROP TABLE people
(2)对应上述SQL语句的MongoDB语句
创建集合
注意:如果该集合当前不存在,则插入操作将创建该集合。
a.隐式的创建一个集合
在第一个 insertOne() 或 insertMany() 操作上隐式创建。如果未指定 _id
字段,则会自动添加主键 _id
。
db.people.insertOne( {user_id: "abc123",age: 55,status: "A"} )
b.显示的创建一个集合
db.createCollection("people")
修改集合
集合并不描述或强制执行其文档的结构;也就是说,集合层面上不会有结构变化。
不过,在文档级别,updateMany() 操作可以使用 $set 操作符将字段添加到现有文档中。
db.people.updateMany({ },{ $set: { join_date: new Date() } }
)
集合并不描述或强制执行其文档的结构;也就是说,集合层面上不会有结构变化。
不过,在文档级别,updateMany() 操作可以使用 $unset 操作符从文档中删除字段。
db.people.updateMany({ },{ $unset: { "join_date": "" } }
)
创建索引
db.people.createIndex( { user_id: 1 } )
db.people.createIndex( { user_id: 1, age: -1 } )
删除集合
db.people.drop()
4.2Insert
(1)传统SQL
INSERT INTO people(user_id,age,status)
VALUES ("bcd001",45,"A")
(2)MongoDB
db.people.insertOne({ user_id: "bcd001", age: 45, status: "A" }
)
4.3Select
(1)传统SQL
(1)SELECT * FROM people(2)SELECT id,user_id,status FROM people(3)SELECT user_id, status FROM people(4)SELECT * FROM people WHERE status = "A"(5)SELECT user_id, status FROM people WHERE status = "A"(6)SELECT * FROM people WHERE status != "A"(7)SELECT * FROM people WHERE status = "A" AND age = 50(8)SELECT * FROM people WHERE status = "A" OR age = 50(9)SELECT * FROM people WHERE age > 25(10)SELECT * FROM people WHERE age < 25(11)SELECT * FROM people WHERE age > 25 AND age <= 50(12)SELECT * FROM people WHERE user_id like "%bc%"(13)SELECT * FROM people WHERE user_id like "bc%"(14)SELECT * FROM people WHERE status = "A" ORDER BY user_id ASC(15)SELECT * FROM people WHERE status = "A" ORDER BY user_id DESC(16)SELECT COUNT(*) FROM people(17)SELECT COUNT(user_id) FROM people(18)SELECT COUNT(*) FROM people WHERE age > 30(19)SELECT DISTINCT(status) FROM people(20)SELECT * FROM people LIMIT 1(21)SELECT * FROM people LIMIT 5 SKIP 10(22)EXPLAIN SELECT * FROM people WHERE status = "A"
(2)MongoDB
(1)db.people.find()(2)db.people.find({ },{ user_id: 1, status: 1 }
)(3)db.people.find({ },{ user_id: 1, status: 1, _id: 0 }
)(4)db.people.find({ status: "A" }
)(5)db.people.find({ status: "A" },{ user_id: 1, status: 1, _id: 0 }
)(6)db.people.find({ status: { $ne: "A" } }
)(7)db.people.find({ status: "A",age: 50 }
)(8)db.people.find({ $or: [ { status: "A" } , { age: 50 } ] }
)(9)db.people.find({ age: { $gt: 25 } }
)(10)db.people.find({ age: { $lt: 25 } }
)(11)db.people.find({ age: { $gt: 25, $lte: 50 } }
)(12)db.people.find( { user_id: /bc/ } )
或
db.people.find( { user_id: { $regex: /bc/ } } )(13)db.people.find( { user_id: /^bc/ } )
或
db.people.find( { user_id: { $regex: /^bc/ } } )(14)db.people.find( { status: "A" } ).sort( { user_id: 1 } )(15)db.people.find( { status: "A" } ).sort( { user_id: -1 } )(16)db.people.count()
或
db.people.find().count()(17)db.people.count( { user_id: { $exists: true } } )
或
db.people.find( { user_id: { $exists: true } } ).count()(18)db.people.count( { age: { $gt: 30 } } )
或
db.people.find( { age: { $gt: 30 } } ).count()(19)db.people.aggregate( [ { $group : { _id : "$status" } } ] )
或,对于不超过 BSON 大小限制的非重复值集
db.people.distinct( "status" )(20)db.people.findOne() 或 db.people.find().limit(1)(21)db.people.find().limit(5).skip(10)(22)db.people.find( { status: "A" } ).explain()
4.4Update
(1)传统SQL
UPDATE people
SET status = "C"
WHERE age > 25UPDATE people
SET age = age + 3
WHERE status = "A"
(2)MongoDB
db.people.updateMany({ age: { $gt: 25 } },{ $set: { status: "C" } }
)db.people.updateMany({ status: "A" } ,{ $inc: { age: 3 } }
)
4.5Delete
(1)传统SQL
DELETE FROM people
WHERE status = "D"DELETE FROM people
(2)MongoDB
db.people.deleteMany( { status: "D" } )db.people.deleteMany({})
相关文章:
MongoDB的简单使用
MongoDB(文档数据库)的简单使用 MongoDB最好的学习资料就是他的官方文档:SQL 到 MongoDB 的映射图表 - MongoDB 手册 v8.0 1.MongoDB CRUD操作 1.1Insert操作 基本方法: db.collection.insertOne() 将单个文档(document)插入集合中 db.collectio…...
【Exp】# Microsoft Visual C++ Redistributable 各版本下载地址
Microsoft官方页面 https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads Redistributable 2019 X86: https://aka.ms/vs/16/release/VC_redist.x86.exe X64: https://aka.ms/vs/16/release/VC_redist.x64.exe Redistributable 201…...
【MySQL】表的约束
目录 一、非空约束not null 二、默认值约束default 三、列描述comment 四、填充零zerofill 五、主键primary key 六、自增长auto_increment 七、唯一键unique 八、外键foreign key 一、非空约束not null 如果不对一个字段做非空约束,则默认为空。但空数据无…...
c++高级篇(四) ——Linux下IO多路复用之epoll模型
IO多路复用 —— epoll 前言 在之前我们就已经介绍过了select和poll,在作为io多路复用的最后一个的epoll,我们来总结一下它们之间的区别: a select 实现原理 select 通过一个文件描述符集合(fd_set)来工作,该集合可以包含需要监控的文件…...
基于Java Springboot环境保护生活App且微信小程序
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...
.NET 9 中 LINQ 新增功能实现过程
本文介绍了.NET 9中LINQ新增功能,包括CountBy、AggregateBy和Index方法,并提供了相关代码示例和输出结果,感兴趣的朋友跟随我一起看看吧 LINQ 介绍 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的…...
【Vue3中Router使用】
Vue3中Router使用 1. 安装vue-router组件2. 建两个测试页面2.1 测试页面Home.vue2.2 测试页面Category.vue 3. 创建路由对象4. 在入口main.js中引入router把App.vue改成路由页面5. 测试5.1 关闭检查解决ESlint报错5.2 改文件名解决ESlint检查报错测试WebHashHistory 和WebHisto…...
性能测试攻略(一):需求分析
性能测试成为软件开发和运维过程中不可或缺的一环。性能测试不仅能够帮助我们了解系统在特定条件下的表现,还能帮助我们发现并解决潜在的性能问题。那么我们怎么做一次完整的性能测试呢?首先,我们需要进行需求分析,来明确我们的测…...
android WebRtc 无法推流以及拉流有视频无声音问题
最近在开发使用WebRtc进行视频通话和语音通话,我使用的设备是MTK的手机,期间后台的技术人员几乎没法提供任何帮助,只有接口和测试的web端,有遇到不能推流。推流成功网页端有画面有声音,但是安卓端有画面,没…...
Socket编程TCP
【Linux】TCP编程 实验:通过TCP通信—在客户端输入要执行的指令,接收执行结果,另服务端接收指令并执行,向客户端发送执行结果 //主函数 #include<iostream> #include<string> #include"log.hpp" #include…...
《以 C++为笔,绘就手势识别人机交互新画卷》
在科技浪潮汹涌澎湃的当下,人机交互领域正处于深刻变革的前沿阵地。从古老的命令行输入到图形化界面的鼠标点击,再到如今风靡全球的触摸操控,每一次交互方式的革新都重塑了我们与电子设备的沟通模式。而近年来,手势识别技术作为一…...
【CSS】小球旋转loading加载动画
效果 css小球旋转loading动画 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document<…...
Leetcode经典题6--买卖股票的最佳时机
买卖股票的最佳时机 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。…...
BA是什么?
目录 1.EKF的步骤 一、问题定义与模型建立 二、线性化处理 三、应用卡尔曼滤波 四、迭代与收敛 五、结果评估与优化 注意事项 2.BA问题的步骤 一、问题定义与数据准备 二、构建优化模型 三、选择优化算法 四、执行优化过程 五、结果评估与优化 六、应用与验证 1.…...
【IDEA】报错:Try to run Maven import with -U flag (force update snapshots)
问题 IDEA运行项目报错:Try to run Maven import with -U flag (force update snapshots) 原因 IDEA 的项目运行绑定的maven有问题, 解决问题 检查项目绑定的maven配置...
MATLAB提供的窗函数
加窗法 为什么使用加窗法? 在数字滤波器设计和频谱估计中,加窗函数的选择对于整体结果的质量有重大影响。加窗的主要作用是减弱因无穷级数截断而产生的吉布斯现象的影响。 windowDesigner 六种常见的窗函数 根据离散时间傅里叶变换的乘法性质&a…...
git 使用配置
新拿到机器想配置git 获取代码权限,需要的配置方法 1. git 配置用户名和邮箱 git config --global user.name xxxgit config --global user.email xxemail.com 2. 生成ssh key ssh-keygen -t rsa -C "xxemail.com" 3. 获取ssh key cat ~/.ssh/id_rsa.…...
【深度学习】深入解析长短期记忆网络(LSTMs)
长短期记忆网络(Long Short-Term Memory networks, LSTMs)是一种特殊的递归神经网络(RNN),专门设计用来解决标准 RNN 在处理长序列数据时的梯度消失和梯度爆炸问题。LSTMs 在许多序列数据任务中表现出色,如…...
vue watch和computed的区别,computed和method的区别
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 在 Vue 中,watch、computed 和 methods 都是常用的响应式功能,它们的用途和工作方式有所不同。下面分别解…...
搭建高可用负载均衡系统:Nginx 与云服务的最佳实践
搭建高可用负载均衡系统:Nginx 与云服务的最佳实践 引言 在项目开发过程中,我们通常在开发和测试阶段采用单机架构进行开发和测试。这是因为在这个阶段,系统的主要目的是功能实现和验证,单机架构足以满足开发人员的日常需求&…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十九,ffmpeg复用
封装就是将 一个h264,和一个aac文件重新封装成一个mp4文件。 这里我们的h264 和 aac都是来源于另一个mp4文件,也就是说,我们会将 in.mp4文件解封装成一路videoavstream 和 一路 audioavstream,然后 将这两路的 avstream 合并成一…...
Node.js JWT认证教程
Node.js JWT认证教程 1. 项目介绍 JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案,在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。 2. 项目准备 2.1 初始化项目 # 创建项目目录 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …...
nn.utils.clip_grad_value_
nn.utils.clip_grad_value_ 是 PyTorch 中的一个函数,用于在训练过程中对模型的梯度进行裁剪,以防止梯度爆炸(gradient explosion)问题。该函数对梯度的每个元素进行裁剪,将其限制在一个指定的最大绝对值范围内。裁剪后…...
Java后端面试模板(技术面)
1、自我介绍模板 面试官您好!我是来自----大学计算机学院的一名大三学生,我的名字叫—。 在大学期间,我主要自学了一些主流的Java技术栈,其中主要包括:Java主流的框架:Spring MVC Spring Boot Spring Clou…...
【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变
【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变 目录 文章目录 【大语言模型】ACL2024论文-24 图像化歧义:Winograd Schema 挑战的视觉转变目录摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果(包含重要…...
Docker 安装和使用
#Docker 安装和使用 文章目录 1. 安装2. 干掉讨厌的 sudo3. 使用镜像源3.1. 使用 upstart 的系统3.2. 使用 systemd 的系统 4. 基本使用4.1. 容器操作4.2. 镜像操作 5. 网络模式说明5.1. bridge 模式5.2. host 模式5.3. container 模式5.4. none 模式 6. 查看 Docker run 启动参…...
nginx网站服务
nginx介绍: 1、高并发,轻量级的web服务软件 2、稳定性高,系统资源消耗率低 对http的高并发处理能力高,单台物理服务器可以支持30000-50000个并发。 一般来说在工作中,单台的并发一般在20000. nginx的功能介绍&…...
MATLAB 手写判断点在多边形内外的2种方法(87)
MATLAB 手写判断点在多边形内外-方法1(87) 一、算法介绍二、算法实现1.方法1(代码+测试)2.方法2(代码+测试)三、结果一、算法介绍 手动实现两种方法,判断点在多边形的内部还是外部, 具体实现和测试代码如下,使用前请自行验证。(代码复制粘贴即可使用) 二、算法实现…...
Android SurfaceFlinger layer层级
壁纸作为显示的最底层窗口它是怎么显示的 1. SurfaceFlinger layer层级 锁屏状态dump SurfaceFlinger ,adb shell dumpsys SurfaceFlinger Display 0 (active) HWC layers: -----------------------------------------------------------------------------------…...
零基础快速掌握——【c语言基础】数组的操作,冒泡排序,选择排序
1.数组 内存空间连续: 2.定义格式 数组的定义格式: 数组分为一维数组、二维数组、以及多维数组,不同类型的数组定义格式时不一样 2.1 一维数组的定义 数据类型 数组名 [数组长度]; 解释: 数据类型࿱…...
个人IP建设:简易指南
许多个体创业者面临的一个关键挑战是如何为其企业创造稳定的需求。 作为个体创业者,您无法使用营销团队,因此许多人通过推荐和他们的网络来产生需求。因此,扩大您的网络是发展您的业务和产生持续需求的最佳策略。 这就是个人IP和品牌发挥作…...
【Unity高级】如何获取着色器(Shader)的关键词
在动态设置Shader时,会需要通过EnableKeyword, DisableKeyword来完成。但一个Shader有哪些关键词呢?Unity的文档中并没有列出来,但我们可以通过遍历Shader的KeywordSpace来查看。 1. 代码如下 using UnityEngine;public class KeywordExamp…...
OSS文件上传
1、我们这个系统对接的阿里云OSS需要先对接小鹏OSS系统获取accessKeyId、accessKeySecret,这个可以忽略 aliyun:oss:endpoint: https://oss-cn-hangzhou.aliyuncs.combucketName: xp-xpd-experiencedomain: https://xp-xpd-experience.oss-cn-hangzhou.aliyuncs.co…...
时序预测算法TimeXer代码解析
在时序预测领域,如何有效地利用外部变量(exogenous variables)来提升内部变量(endogenous variables)的预测性能一直是一个挑战。 在上一篇文章中,我结合论文为大家解读了TimeXer框架,今天&…...
【无标题】建议用坚果云直接同步zotero,其他方法已经过时,容易出现bug
created: 2024-12-06T16:07:45 (UTC 08:00) tags: [] source: https://zotero-chinese.com/user-guide/sync author: 数据与文件的同步 | Zotero 中文社区 Excerpt Zotero 中文社区,Zotero 中文维护小组,Zotero 插件,Zotero 中文 CSL 样式 数…...
Hive 分桶表的创建与填充操作详解
Hive 分桶表的创建与填充操作详解 在 Hive 数据处理中,分桶表是一个极具实用价值的功能,它相较于非分桶表能够实现更高效的采样,并且后续还可能支持诸如 Map 端连接等节省时间的操作。不过,值得注意的是,在向表写入数…...
docker怎么commit tag push?
在 Docker 中,commit、tag 和 push 是用于创建和推送自定义镜像到仓库的三个不同步骤。以下是每个命令的详细说明和使用方法: ### 1. docker commit 当你对一个运行中的容器做了修改,并希望将这些修改保存为一个新的镜像时,可以使…...
全面替换VMware,南昌大学一卡通的硬核智慧
将一昼夜分为十二时辰 是古人的博大智慧 晨光熹微,门扉轻启,负笈而行 智慧校园的“十二时辰”启幕新章 一、数字南大:一卡通打卡校园十二时辰 时辰轮转,一时有一时的使命师生们是如何高效、便捷地度过每个时辰?一张充…...
SpringMVC ,ioc和aop
IOC和AOP IOC 控制反转,将应用程序的控制权交给spring容器管理,而不是应用程序本身 1.创建一个mapper,测试用, 就写个普通方法 public class UserMapper {public void addUser(){System.out.println("dao层新增");} …...
3GPP R18 LTM(L1/L2 Triggered Mobility)是什么鬼?(三) RACH-less LTM cell switch
这篇看下RACH-less LTM cell switch。 相比于RACH-based LTM,RACH-less LTM在进行LTM cell switch之前就要先知道target cell的TA信息,进而才能进行RACH-less过程,这里一般可以通过UE自行测量或者通过RA过程获取,而这里的RA一般是通过PDCCH order过程触发。根据38.300中的描…...
Ansys Maxwell:Qi 无线充电组件
Qi 无线充电采用感应充电技术,无需物理连接器或电缆,即可将电力从充电站传输到兼容设备。由 WPC 管理的 Qi 标准确保了不同无线充电产品之间的互操作性。以下是 Qi v1.3 标准的核心功能: Qi v1.3 标准的主要特点 身份验证:确保充…...
Neo4j 图数据库安装与操作指南(以mac为例)
目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew(可选) 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…...
基于MFC绘制门电路
MFC绘制门电路 1. 设计内容、方法与难点 本课题设计的内容包括了基本门电路中与门和非门的绘制、选中以及它们之间的连接。具体采用的方法是在OnDraw函数里面进行绘制,并设计元器件基类,派生出与门和非门,并组合了一个引脚类,在…...
Gitee上获取renren-fast-vue install并run dev错误处理
目的:获取一个手脚架、越简约越好、越干净越好、于是看上了renren-fast-vue… 前端:vue2 后端:jdk1.8 mysql 5.7 SpringBoot单体架构 一开始只是下载前后端项目到本地,一堆乱七八糟的错误,网上找的资料也参差不齐… …...
sdk项目的git 标记新tag的版本号
在 Git 中,tag 是用来标记某个特定的提交点(通常是发布版本或重要的里程碑)的工具。通过 git tag,你可以为版本号创建标记,帮助团队跟踪不同版本的代码。 如果你想创建一个新的版本号标签,可以按照以下步骤…...
学习日志022 -- python事件机制
作业: 1】思维导图 2】完成闹钟 main.py import sysfrom PySide6.QtCore import QTimerEvent, QTime,Qt from PySide6.QtGui import QMovie,QMouseEvent from PySide6.QtWidgets import QApplication, QWidget from Form import Ui_Formclass MyWidget(Ui_Form,Q…...
JAVA八股文-运行篇-创建项目运行(1)
前置环境搭建:jdk、maven、idea、linux环境 一、创建一个java项目 File->New->Project 二、填写基本信息 三、完成,写了一段代码 四、打包 五、本地运行,运行和debug二选一 六、上传至linux环境 七、linux环境下命令执行 7.1 指定Main方法类 …...
Vue Web开发(二)
1. 项目搭建 1.1. 首页架子搭建 使用Element ui中的Container布局容器,选择倒数第二个样式,将代码复制到Home.vue。 1.1.1.下载less (1)下载less样式 npm i less (2)下载less编辑解析器 npm i less…...
Midjourney Describe API 的对接和使用
Midjourney Describe API 的对接和使用 Midjourney Describe API 的主要功能是通过上传图片,获取对图片的描述。使用该 API,只需要传递图片文件地址,API 会返回图片的详细描述。无需繁琐的参数设置,即可获得高质量的图片描述。 …...
MySQL是怎么加锁的
1. 全局锁 1.1 什么是全局锁? 全局锁是一种一次性锁住整个数据库的锁定机制。一旦加上全局锁,整个数据库的所有表都会处于只读状态,这意味着所有修改操作(如INSERT、UPDATE、DELETE)都会被阻塞。 常用的SQL命令&…...