简单了解MongoDB数据存储

官方文档:MongoDB中文手册|官方文档中文版 | MongoDB-CN-Manual

什么是MongoDB?

MongnDB是一个分布式文件存储数据库(或叫文档数据库),是一个介于 关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库,最接近关系型数据库的。

MongoDB中的记录是一个文档,它是由字段和值(key:value)对组成的数据结构。MongoDB文档类似于JSON的BSON类型,BSON就是JSON的二进制表示,文档的字段的值可以包括其他文档,数组和文档数组。

MongoDB 特点

MongoDB 的一些关键特点:

  • 文档导向:MongoDB 存储 BSON(二进制 JSON)文档,这些文档可以包含复杂的数据结构,如数组和嵌套对象。
  • 高性能:MongoDB 提供了高性能的数据持久化和查询能力,特别是对于写入密集型的应用。
  • 水平扩展:通过分片(sharding)技术,MongoDB 可以在多个服务器之间分布数据,实现水平扩展。
  • 高可用性:MongoDB 支持副本集(replica sets),提供数据的自动故障转移和数据冗余。
  • 灵活的聚合框架:MongoDB 提供了一个强大的聚合框架,允许执行复杂的数据处理和聚合操作。
  • 丰富的查询语言:MongoDB 的查询语言(MQL)支持丰富的查询操作,包括文本搜索、地理位置查询等。
  • 存储过程:MongoDB 支持在数据库内部执行 JavaScript 代码,允许定义和执行复杂的数据处理逻辑。
  • GridFS:对于存储大于 BSON 文档大小限制(16MB)的文件,MongoDB 提供了 GridFS,一种用于存储和检索大文件的规范。
  • 安全性:MongoDB 提供了多层次的安全特性,包括认证、授权和加密。
  • 驱动程序和工具:MongoDB 拥有广泛的驱动程序支持,适用于不同的编程语言,以及各种管理工具和可视化界面。
  • 社区和生态系统:MongoDB 拥有一个活跃的开发者社区,提供了大量的教程、文档和第三方工具

MongoDB三大核心概念

1. 数据库(Database)

数据库是集合的物理容器,每个数据库在文件系统上有自己的文件集,一个MongoDB服务器通常有多个数据库,类似于关系型数据库中的数据库。

2. 集合(Collection)

集合是一组MongoDB文档的集合,相当于RDBMS的表。集合存在于一个单独的数据库中。集合不强制执行模式,集合中的文档可以具有不同的字段,通常,集合中的所有文档具有相似或相关的目的。类似于关系型数据库中的表。

3. 文档(Document)

文档是一组键值对。文档具有动态模式,动态模式意味着同一个集合中的文档不需要具有相同的字段或结构,并且集合的文档中的共同字段可能包含不同类型的数据。类似于关系型数据库中的行(row),以 BSON 格式存储。

一条文档示例:(博客)

{_id: ObjectId(7df78ad8902c)title: 'MongoDB Overview', description: 'MongoDB is no sql database',by: 'tutorials point',url: 'http://www.tutorialspoint.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100, comments: [  {user:'user1',message: 'My first comment',dateCreated: new Date(2011,1,20,2,15),like: 0 },{user:'user2',message: 'My second comments',dateCreated: new Date(2011,1,25,7,45),like: 5}]
}

其中"_id"是自动生成的,可以自己另外设置一个“_id”的值覆盖自动生成“_id”的值。但是如果文档已经生成了就无法直接去修改“_id”的值,但是可以通过“删除-添加”的方式实现

RDBMS术语与MongoDB之间的关系

关系型数据库管理系统(RDBMS)

MongoDB

数据库(Database)

数据库(Database)

表(Table)

集合(Collection)

元组/行(Tuple/Row)

文档(Document)

列(Column)

字段(Field)

表连接(Table Join)

嵌入式文档(Embedded Documents)

主键(Primary Key)

主键(默认键_id由MongoDB自身提供)

MongoDB的安装

下载地址:Download MongoDB Community Server | MongoDB

选择合适的版本下载:

安装步骤链接:Windows(超详细保姆级教学)安装mongodb数据库_windows安装mongodb-CSDN博客

根据上面的连接成功连接上mongodb数据库

注意:安装过程中是否设置了密码,我没有设置所以验证就是none;

MongoDB的常用操作命令

数据库操作

a. 创建数据库

use 数据库名

使用 use 命令来指定一个数据库时,如果该数据库不存在,MongoDB将自动创建它。

b. 查看数据库列表

show dbs

c. 删除数据库

use 数据库名 //先切换到要删除的数据库

db.dropDatabase() //然后删除当前数据库

集合操作

操作某个数据库的集合要记住使用【use 数据库名】,切换数据库

a. 创建集合

db.createCollection(name, options)

参数说明:

  • name: 要创建的集合名称。
  • options: 可选参数, 指定有关内存大小及索引的选项。

options 可以是如下参数:

参数名

类型

描述

示例值

capped

布尔值

是否创建一个固定大小的集合。

true

size

数值

集合的最大大小(以字节为单位)。仅在 capped

为 true 时有效。

10485760

(10MB)

max

数值

集合中允许的最大文档数。仅在 capped

为 true 时有效。

5000

validator

对象

用于文档验证的表达式。

{ $jsonSchema: { ... }}

validationLevel

字符串

指定文档验证的严格程度。
"off"

:不进行验证。
"strict"

:插入和更新操作都必须通过验证(默认)。
"moderate"

:仅现有文档更新时必须通过验证,插入新文档时不需要。

"strict"

validationAction

字符串

指定文档验证失败时的操作。
"error"

:阻止插入或更新(默认)。
"warn"

:允许插入或更新,但会发出警告。

"error"

storageEngine

对象

为集合指定存储引擎配置。

{ wiredTiger: { ... }}

collation

对象

指定集合的默认排序规则。

{ locale: "en", strength: 2 }

b. 更新集合

db.adminCommand({
renameCollection: "原数据库.原集合",
to: "目标数据库.目标集合",
dropTarget: <boolean>
})

参数说明:

  • renameCollection:要重命名的集合的完全限定名称(包括数据库名)。
  • to:目标集合的完全限定名称(包括数据库名)。
  • dropTarget(可选):布尔值。如果目标集合已经存在,是否删除目标集合。默认值为 false

c. 删除集合

db.集合名.drop()

drop() 方法可以永久地从数据库中删除指定的集合及其所有文档,这是一个不可逆的操作,因此需要谨慎使用

文档操作

a. 添加文档

方法

用途

是否弃用

insertOne()

插入单个文档

insertMany()

插入多个文档

insert()

插入单个或多个文档

save()

插入或更新文档

db.集合.insertOne(document, options)

  • document:要插入的单个文档。
  • options(可选):一个可选参数对象,可以包含 writeConcern 和 bypassDocumentValidation 等。

实例:

db.myCollection.insertOne(

{
name: "Alice",
age: 25,
city: "New York"
}

);

db.集合.insertMany(documents, options)

  • documents:要插入的文档数组。
  • options(可选):一个可选参数对象,可以包含 ordered、writeConcern 和 bypassDocumentValidation 等。

db.myCollection.insertMany(

[
{ name: "Bob", age: 30, city: "Los Angeles" },
{ name: "Charlie", age: 35, city: "Chicago" }
]

);

从 MongoDB 4.2 开始,db.collection.save() 和 insert()已被标记为弃用

b. 更新文档

ⅰ. 更新单个文档

db.集合.updateOne(filter, update, options)

  • filter:用于查找文档的查询条件。
  • update:指定更新操作的文档或更新操作符。
  • options:可选参数对象,如 upsertarrayFilters 等。

示例:

db.myCollection.updateOne(

{ name: "Alice" }, // 过滤条件

{ $set: { age: 26 } }, // 更新操作

{ upsert: false } // 可选参数

);

ⅱ. 批量更新

db.集合.updateMany(filter, update, options)

ⅲ. 单个文档替换

db.集合.replaceOne(filter, replacement, options)

  • filter:用于查找文档的查询条件。
  • replacement:新的文档,将替换旧的文档。
  • options:可选参数对象,如 upsert 等。

示例:

db.myCollection.replaceOne(
{ name: "Bob" }, // 过滤条件
{ name: "Bob", age: 31 } // 新文档
);

ⅳ. 查找并更新

db.集合.findOneAndUpdate(filter, update, options)

  • filter:用于查找文档的查询条件。
  • update:指定更新操作的文档或更新操作符。
  • options:可选参数对象,如 projectionsortupsertreturnDocument

options 参数通常可以包含以下选项:

  • upsert:如果没有匹配的文档,是否插入一个新文档。
  • arrayFilters:当更新嵌套数组时,指定应更新的数组元素的条件。
  • collation:指定比较字符串时使用的排序规则。
  • returnDocument:在 findOneAndUpdate 中使用,指定返回更新前 ("before") 或更新后 ("after") 的文档。

c. 删除文档

ⅰ. 删除单个文档

db.集合.deleteOne(filter, options)

  • filter:用于查找要删除的文档的查询条件。
  • options(可选):一个可选参数对象。
ⅱ. 批量删除

db.集合.deleteMany(filter, options)

ⅲ. 查找并删除单个文档

db.集合.findOneAndDelete(filter, options)

  • filter:用于查找要删除的文档的查询条件。
  • options:可选参数对象,如 projectionsort

示例:

db.myCollection.findOneAndDelete(
{ name: "Charlie" },
{ projection: { name: 1, age: 1 } }
);

删除操作options 参数通常可以包含以下选项:

  • writeConcern:指定写操作的确认级别。
  • collation:指定比较字符串时使用的排序规则。
  • projection(仅适用于 findOneAndDelete):指定返回的字段。
  • sort(仅适用于 findOneAndDelete):指定排序顺序以确定要删除的文档。

d. 查询文档

ⅰ. 简单查询

db.集合.find(query, projection)

  • query:用于查找文档的查询条件。默认为 {},即匹配所有文档。
  • projection(可选):指定返回结果中包含或排除的字段。

示例

db.myCollection.find(
{ age: { $gt: 25 } },
{ name: 1, age: 1, _id: 0 }
);

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.集合.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

示例

db.col.find().pretty()

结果:
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

db.集合.findOne(query, projection)

ⅱ. 高级查询方法
1. 使用比较操作符

MongoDB 支持多种比较操作符,如 $gt、$lt、$gte、$lte、$eq、$ne 等。

操作符

描述

示例

$eq

等于

{ age: { $eq: 25 } }

$ne

不等于

{ age: { $ne: 25 } }

$gt

大于

{ age: { $gt: 25 } }

$gte

大于等于

{ age: { $gte: 25 } }

$lt

小于

{ age: { $lt: 25 } }

$lte

小于等于

{ age: { $lte: 25 } }

$in

在指定的数组中

{ age: { $in: [25, 30, 35] } }

$nin

不在指定的数组中

{ age: { $nin: [25, 30, 35] } }

示例:

查找年龄大于 25 的文档:

db.myCollection.find({ age: { $gt: 25 } });

2. 使用逻辑操作符

MongoDB 支持多种逻辑操作符,如 $and、$or、$not、$nor 等。

操作符

描述

示例

$and

逻辑与,符合所有条件

{ $and: [ { age: { $gt: 25 } }, { city: "New York" } ] }

$or

逻辑或,符合任意条件

{ $or: [ { age: { $lt: 25 } }, { city: "New York" } ] }

$not

取反,不符合条件

{ age: { $not: { $gt: 25 } } }

$nor

逻辑或非,均不符合条件

{ $nor: [ { age: { $gt: 25 } }, { city: "New York" } ] }

示例:

找年龄大于 25 且城市为 "New York" 的文档:

db.myCollection.find({
$and: [
{ age: { $gt: 25 } },
{ city: "New York" }
]
});

'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'

db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

结果:
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

3. 使用元素操作符

操作符

描述

示例

$exists

字段是否存在

{ age: { $exists: true } }

$type

字段的 BSON 类型

{ age: { $type: "int" } }

示例:

查找包含 age 字段的文档:

db.collection.find({ age: { $exists: true } })

查找 age 字段为整数类型的文档:

db.collection.find({ age: { $type: "int" } })

4. 使用数组操作符

操作符

描述

示例

$all

数组包含所有指定的元素

{ tags: { $all: ["red", "blue"] } }

$elemMatch

数组中的元素匹配指定条件

{ results: { $elemMatch: { score: { $gt: 80, $lt: 85 } } } }

$size

数组的长度等于指定值

{ tags: { $size: 3 } }

5. 使用其他操作符

操作符

描述

示例

$regex

匹配正则表达式

{ name: { $regex: /^A/ } }

$text

进行文本搜索

{ $text: { $search: "coffee" } }

$where

使用 JavaScript 表达式进行条件过滤

{ $where: "this.age > 25" }

$near

查找接近指定点的文档

db.collection.find({ location: { $near: [10, 20], $maxDistance: 1000 } })

$geoWithin

查找在指定地理区域内的文档

db.collection.find({ location: { $geoWithin: { $centerSphere: [[10, 20], 1] } } })

6. 使用正则表达式

可以使用正则表达式进行模式匹配查询。

示例:

查找名字以 "A" 开头的文档:

db.myCollection.find({ name: /^A/ });

7. 投影(指定返回结果字段)

投影用于控制查询结果中返回的字段。可以使用包含字段和排除字段两种方式。

示例:

只返回名字和年龄字段:

db.myCollection.find(
{ age: { $gt: 25 } },
{ name: 1, age: 1, _id: 0 }
);

8. 排序

示例:

按年龄降序排序:

db.myCollection.find().sort({ age: -1 });

9. 限制与跳过(分页)

可以对查询结果进行限制和跳过指定数量的文档。

示例1:

返回前 10 个文档:

db.myCollection.find().limit(10);

示例2:

跳过前 5 个文档,返回接下来的 10 个文档:

db.myCollection.find().skip(5).limit(10);

e. 聚合统计

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

ⅰ. aggregate() 方法

db.集合.aggregate(AGGREGATE_OPERATION)

表达式

描述

实例

$sum

计算总和。

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])

$avg

计算平均值

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])

$min

获取集合中所有文档对应值得最小值。

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])

$max

获取集合中所有文档对应值得最大值。

db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])

$push

将值加入一个数组中,不会判断是否有重复的值。

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

$addToSet

将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。

db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])

$first

根据资源文档的排序获取第一个文档数据。

db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])

$last

根据资源文档的排序获取最后一个文档数据

db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

ⅱ. 管道操作

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

聚合框架中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

示例:

db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } }, //第一个管道
{ $group: { _id: null, count: { $sum: 1 } } } //第二个管道
] );

$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。

按顺序将前一个管道的处理后的数据传给后一个管道的处理,以此类推

关注我,下一篇讲Spring Boot 整合MongoDB

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

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

相关文章

web网站开发,在线%射击比赛成绩管理%系统开发demo,基于html,css,jquery,python,django,model,orm,mysql数据库

经验心得 这个也是crud业务单子&#xff0c;第二个聊点其他的&#xff0c;从最早的无分层开发&#xff0c;到三层开发&#xff0c;工厂&#xff0c;各种接口&#xff0c;再到后面多层&#xff0c;代码无痕aop&#xff0c;各种框架等&#xff0c;都是在方便我们快速打架一个程序…

[QtADS]解析ads.pro

本文来源 &#xff1a; 腾讯元宝subdirs : 子目录TEMPLATE subdirs的作用​​​​核心功能​​&#xff1a;声明当前项目为“多项目管理”模式。Qt 的构建系统&#xff08;qmake&#xff09;会遍历 SUBDIRS中列出的子目录&#xff0c;在每个子目录中寻找 .pro文件并递归构建。…

三方相机问题分析六:【没用相机,诡异的手电筒不可使用】下拉状态栏,手电筒置灰,无法打开,提提示相机正在使用

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 三方相机问题分析六:【没用相机,诡异的手电筒不可使用】下拉状态栏,点击手电筒,手电筒置灰,无法打开,提提示相机正在使用9348353 目录 一、问题背景 二、:问题分析过程 2.1:基于…

Java Selenium 自动打开浏览器保存截图

// 代码 public class ScreenshotExample {public static void main(String[] args) {// 1. 设置浏览器驱动路径&#xff08;根据实际路径修改&#xff09;System.setProperty("webdriver.chrome.driver", "D:\\chromedriver-win64\\chromedriver.exe");//…

新商机:为了减少辐射,可以用座机打机房中心再转手机

某些人痛恨自家附近有基站&#xff0c;说是辐射太大。你不能说人家迷信。一般解决办法就是拆基站。而我觉得&#xff0c;商机来了。现在座机基本没人装了。新商机就是座机。附近没有基站&#xff0c;又要打电话&#xff0c;怎么办&#xff1f;装座机。用座机打电话时&#xff0…

【Java|第十九篇】面向对象九——String类和枚举类

&#xff08;四&#xff09;面向对象11、String类&#xff08;1&#xff09;概述<1>String是一个类&#xff0c;引用数据类型&#xff0c;用来表示字符串&#xff1b;<2>String是Lang包下的类&#xff0c;使用不需要导包&#xff1b;<3>字符串的值不能变&…

超越相似名称:Elasticsearch semantic text 如何在简洁、高效、集成方面超越 OpenSearch semantic 字段

作者&#xff1a;来自 Elastic Mike Pellegrini, Nick Chow 及 Libby Lin 比较 Elasticsearch 语义文本和 OpenSearch 语义字段在简洁性、可配置性和效率方面的表现。 自己动手体验向量搜索&#xff0c;使用这个自定进度的 Search AI 实操学习。你现在可以开始免费的云试用&am…

OpenAI发布最新大模型GPT5、本地部署GPT开源模型

OpenAI发布最新大模型GPT5、本地部署GPT开源模型 GPT-5概述 北京时间 2025年8月8日 凌晨1点 OPENAI举行了1个小时的线上发布会&#xff0c;正式推出了其史上最聪明、最强大的大模型GPT-5。 GPT-5是OpenAI发布的最新一代大型语言模型&#xff0c;它基于Transformer架构&#xff…

容器网络模式选择在云服务器多节点部署中的连通性验证方案

容器网络模式选择在云服务器多节点部署中的连通性验证方案在云计算环境中&#xff0c;容器网络模式的选择直接影响着多节点部署的通信效率和安全性。本文将从Docker原生网络驱动对比入手&#xff0c;深入分析Overlay、Host、Bridge等主流网络模式在跨主机通信场景下的性能表现&…

电商双11美妆数据分析

1、数据初步了解2.数据清洗2.1 重复值处理 直接删除重复值。2.2 缺失值处理通过上面观察数据发现sale_count,comment_count 存在缺失值,先观察存在缺失值的行的基本情况存在的缺失值很可能意味着售出的数量为0或者评论的数量为0&#xff0c;所以我们用0来填补缺失值。2.3 数据挖…

Pytest项目_day14(参数化、数据驱动)

parametrize 参数化可以组装测试数据。在测试前定义好测试数据&#xff0c;并在测试用例中使用 单参数单次循环 我们可以在装饰器中使用mark.parametrize&#xff0c;来定义参数名和参数值列表 参数名还需要传给函数参数名需要用字符串来定义&#xff0c;参数值列表需要用可迭代…

Nest.js、Knex.js、Nuxt.js、Next.js 和 Spring Boot的异同相关概念

总述Nest.js、Knex.js、Nuxt.js、Next.js 和 Spring Boot 是分属不同技术领域的工具&#xff0c;涵盖前端框架、后端框架、数据库工具等角色&#xff0c;它们在开发中既有功能交集&#xff0c;也有明确的定位差异。一、相同点服务端参与能力五者均能在服务端发挥作用&#xff1…

第2节 大模型分布式推理架构设计原则

大模型推理系统的设计过程,本质上是在多重约束下寻找最优解的过程。硬件资源的物理限制、场景对性能的刚性要求、系统的可扩展性需求,共同构成了设计的边界条件。明确这些约束的具体表现形式,理解性能指标之间的权衡逻辑,确立架构设计的核心原则,是构建高效分布式推理系统…

快速部署一个鉴黄服务

1.安装依赖pip install opennsfw22.代码实现import opennsfw2 as n2# 将自动下载预训练模型 open_nsfw_weights.h5 到 C:\Users\Administrator\.opennsfw2\weights # pip install opennsfw2# 单张预测 image_path 1.jpg nsfw_probability n2.predict_image(image_path) print…

Camera open failed

前言 由前面的几篇博客可以知道&#xff0c;openCamera&#xff0c;createCaptureSession&#xff0c;setRepeatingRequest&#xff0c;capture是非常重要的过程&#xff0c;如果其中一个环节出了问题时该如何分析呢&#xff0c;这里我们首先从打开相机流程时&#xff0c;打开…

医美产业科技成果展陈中心:连接微观肌肤世界与前沿科技的桥梁

作为一名深耕展陈设计施工的从业者&#xff0c;当接到医美产业科技成果展陈中心的项目时&#xff0c;我深知这不是简单的 “技术堆砌”&#xff0c;而是要在 “科学严谨性” 与 “美学体验感” 之间找到平衡 —— 让参观者既能看懂激光设备的波长原理&#xff0c;又能感知胶原蛋…

在 Android 系统中清理应用数据但保留应用程序本身,可以通过以下几种方法实现

在 Android 系统中清理应用数据但保留应用程序本身&#xff0c;可以通过以下几种方法实现在 Android 系统中清理应用数据但保留应用程序本身&#xff0c;可以通过以下几种方法实现&#xff1a;方法 1: 使用 Android 设置&#xff08;无需 root&#xff09;方法 2: 使用 ADB 命令…

Linux中tty与8250-uart的虐恋(包括双中断发送接收机制)

串口通用驱动文件在哪里&#xff1f; drivers/tty/serial/哪一个是正确的compatible&#xff1f; arch/arm64/boot/dts/rockchip/rk3568.dtsi uart3: serialfe670000 {compatible "rockchip,rk3568-uart", "snps,dw-apb-uart";reg <0x0 0xfe670000 0…

GitHub 仓库代码上传指南

文章目录 🛠️ 一、环境准备 🧱 二、创建 GitHub 仓库 ⚙️ 三、本地代码上传流程 首次上传 更新已有代码 🔐 四、认证问题解决(必看!) 方案 1:个人访问令牌(PAT) 方案 2:SSH 密钥(推荐长期使用) ⚡ 五、常见错误处理 🏆 六、最佳实践建议 💎 高级技巧 🛠…

介绍一下 自动驾驶 感知多任务训练模型设计

自动驾驶感知多任务训练模型是指在一个统一的模型架构中&#xff0c;同时完成自动驾驶场景下的多个感知任务&#xff08;如目标检测、语义分割、深度估计、车道线检测等&#xff09;的模型设计。其核心目标是通过特征共享和任务协同&#xff0c;在提升单任务性能的同时&#xf…