当前位置: 首页 > news >正文

MongoDB知识框架

简介:MongoDB 是一个基于分布式文件存储的数据库,属于 NoSQL 数据库产品,以下是其知识框架总结:

一、数据模型

  • 文档:MongoDB 中的数据以 BSON(二进制形式的 JSON)格式存储在集合中,文档类似于关系型数据库中的行,但结构更灵活。
  • 集合:是文档的容器,类似于关系型数据库中的表,但集合中的文档不需要有相同的字段结构。
  • 数据库:多个集合组成一个数据库,一个 MongoDB 实例可以包含多个数据库。

二、数据库操作

  • 创建数据库:使用 use 命令,若数据库不存在则会在插入数据时自动创建。
  • 查看数据库:使用 show dbs 命令列出所有数据库。
  • 删除数据库:使用 db.dropDatabase() 方法删除当前数据库。

三、集合操作

  • 创建集合:使用 db.createCollection('集合名') 创建集合。
  • 查看集合:使用 show collections 命令查看当前数据库中的所有集合。
  • 删除集合:使用 db.集合名.drop() 方法删除指定集合。

四、文档操作

  • 插入文档:使用 db.集合名.insertOne({字段:值}) 插入单个文档,db.集合名.insertMany([{文档1},{文档2}]) 插入多个文档。
  • 查询文档:使用 db.集合名.find({查询条件}) 查询文档,支持多种查询操作符,如 $eq(等于)、$gt(大于)、$in(包含)等。
  • 更新文档:使用 db.集合名.updateOne({查询条件}, {$set:{字段:新值}}) 更新单个文档,db.集合名.updateMany() 更新多个文档。
  • 删除文档:使用 db.集合名.deleteOne({查询条件}) 删除单个文档,db.集合名.deleteMany({查询条件}) 删除多个文档。

五、索引

  • 创建索引:使用 db.集合名.createIndex({字段:1}) 创建升序索引,{字段:-1} 创建降序索引,还支持复合索引、文本索引等。
  • 查看索引:使用 db.集合名.getIndexes() 查看集合的索引信息。
  • 删除索引:使用 db.集合名.dropIndex({索引名:1}) 删除指定索引,db.集合名.dropIndexes() 删除所有索引。

六、聚合操作

  • 聚合管道:使用 db.集合名.aggregate([{阶段1},{阶段2}]) 进行聚合操作,常见的聚合阶段有 $match(筛选)、$group(分组)、$project(投影)等。

七、副本集

  • 概念:是一组 MongoDB 实例,其中一个为主节点,其余为从节点,用于数据冗余和高可用性。
  • 配置:需要在每个节点的配置文件中设置相关参数,并使用 rs.initiate() 初始化副本集。

八、分片集群

  • 概念:将数据分散存储在多个服务器上,以提高存储和查询性能。
  • 组件:包括分片服务器(Shard)、配置服务器(Config Server)和路由服务器(Mongos)。

九、性能优化

1、索引优化
  • 合理创建索引:根据查询条件创建复合索引、唯一索引等,避免全表扫描。
  • 避免冗余索引:定期使用 db.collection.getIndexes() 检查并删除无用索引。
  • 索引覆盖查询:确保查询的字段都在索引中,减少文档扫描。
2、查询优化

  • 避免大查询:使用分页(limit 和 skip)处理大量数据,避免一次性返回过多结果。
  • 优化聚合管道:在管道开头使用 $match 尽早过滤数据,减少后续阶段的处理量。
3、内存管理

  • WiredTiger 存储引擎:调整 wiredTigerCacheSizeGB 参数,通常设置为系统内存的 50%。
  • 监控内存使用:通过 db.serverStatus().wiredTiger.cache 查看缓存命中率。
4、分片与副本集
  • 分片策略:选择合适的分片键(如哈希分片、范围分片),避免数据倾斜。
  • 读写分离:在副本集从节点上处理读请求,减轻主节点压力。
5、硬件与存储

  • 使用 SSD:提升 I/O 性能,尤其是写入密集型工作负载。
  • 禁用交换空间:避免内存交换导致的性能骤降。

十、安全配置

1、认证与授权

  • 启用身份验证:在配置文件中设置 security.authorization: "enabled",创建管理员用户。
  • 基于角色的访问控制(RBAC):为不同用户分配不同角色(如 readWritedbAdmin),使用 db.createUser() 创建用户。
2、网络安全

  • 绑定 IP 地址:在配置文件中设置 net.bindIp: 127.0.0.1 或指定允许访问的 IP。
  • 使用防火墙:限制 MongoDB 端口(默认 27017)的访问,仅允许授权 IP 连接。
  • 启用 TLS/SSL:配置证书实现加密通信,设置 net.ssl.mode: requireSSL
3、数据加密

  • 静态数据加密:使用 MongoDB Enterprise 版本的加密功能或操作系统级加密(如 LUKS)。
  • 传输加密:通过 SSL/TLS 加密客户端与服务器之间的通信。
4、审计与监控

  • 启用审计日志:配置 auditLog 参数记录关键操作(如用户认证、敏感命令)。
  • 定期安全审计:检查用户权限、网络配置和日志,识别潜在风险。
5、版本更新与漏洞修复
  • 及时更新 MongoDB:修复已知安全漏洞,建议使用 LTS 版本。
6、敏感操作限制

  • 禁用危险命令:如 $where 操作符,防止 JavaScript 注入攻击。
  • 限制 MongoDB 进程权限:运行 MongoDB 服务的用户应仅拥有必要的系统权限

相关文章:

MongoDB知识框架

简介:MongoDB 是一个基于分布式文件存储的数据库,属于 NoSQL 数据库产品,以下是其知识框架总结: 一、数据模型 文档:MongoDB 中的数据以 BSON(二进制形式的 JSON)格式存储在集合中,…...

2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)

2025数维杯数学建模竞赛C题完整参考论文 目录 摘要 一、问题重述 二、问题分析 三、模型假设 四、符合与定义说明 五、 模型建立与求解 5.1问题1 5.1.1问题1思路分析 5.1.2问题1模型建立 5.1.3问题1求解结果 5.2问题2 5.2.1问题2思路分析 5.2.2问题2…...

深度学习 ———— 迁移学习

迁移学习原理 什么是迁移学习? 迁移学习利用在大规模数据集(如ImageNet)上预训练的模型,改装小数据集(如CIFAR-10)。优势: 减少训练时间:预训练模型已学习通用特征(如边…...

第十七章,反病毒---防病毒网管

基于杀毒软件的一种防御技术,是一种被动 的防御技术。 防病毒网关和主机上的杀毒软件在功能上互补和协作的关系。 病毒 --- 一般是感染或者附着在应用程序或文件中的;一般都是通过邮件或文件共享的方式进行传 输,从而对主机进行破坏 。 计…...

信赖域策略优化TRPO算法详解:python从零实现

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...

powershell_bypass.cna 插件(适配 Cobalt Strike 4.0 的免费版本下载地址)

目录 1. powershell_bypass.cna 插件(适配 Cobalt Strike 4.0 的免费版本下载地址) 2. 生成 EXE 文件时出现 "运行异常,请查看 Script Console" 的处理方法 处理步骤 3. powershell_bypass.cna 插件的功能及实际操作步骤 功能…...

从Dockerfile 构建docker镜像——保姆级教程

从Dockfile开始 dockerfile简介开始构建1、编辑dockerfile2、构建镜像3、拉取镜像4、推送到镜像仓库 镜像的优化1、优化的基本原则2、多阶段构建 dockerfile简介 开始构建 1、编辑dockerfile # 使用官方的 Python 3.8 镜像作为基础镜像 FROM python:3.8-slim# 设置工作目录 …...

Mac配置php开发环境(多PHP版本,安装Redis)

配置PHP开发环境 配置多版本PHP 因为开发需要,有时需要根据项目及时切换多个版本,除了使用Docker以外,常用的就是直接在mac配置PHP版本 使用 Homebrew Mac 可以通过 Homebrew 来安装或切换 PHP 版本: brew update brew insta…...

Quorum协议原理与应用详解

一、Quorum 协议核心原理 基本定义 Quorum 是一种基于 读写投票机制 的分布式一致性协议,通过权衡一致性(C)与可用性(A)实现数据冗余和最终一致性。其核心规则为: W(写成功副本数) …...

五一旅游潮涌:数字化如何驱动智慧旅游升级

文化和旅游部5月6日公布2025年“五一”假期文化和旅游市场情况,经文化和旅游部数据中心测算,假期5天,全国国内出游3.14亿人次,同比增长6.4%;国内游客出游总花费1802.69亿元,同比增长8.0%。在这组流动的数字…...

WPF 3D图形编程核心技术解析

一、三维坐标系系统 WPF采用右手坐标系系统,空间定位遵循: X 轴 → 右 Y 轴 → 上 Z 轴 → 观察方向 X轴 \rightarrow 右\quad Y轴 \rightarrow 上\quad Z轴 \rightarrow 观察方向 X轴→右Y轴→上Z轴→观察方向 三维坐标值表示为 ( x , y , z ) (x, y,…...

BLURRR剪辑软件免费版:创意剪辑,轻松上手,打造个性视频

BLURRR剪辑软件免费版是一款功能强大、简约易用且充满创意的视频剪辑软件。它集多种功能于一体,无论是新手还是资深用户,都能通过简单的操作剪辑出高质量、富有创意的视频。BLURRR不仅提供了丰富的剪辑工具,还划分了不同的内容模块&#xff0…...

TIME - MoE 模型代码 3.2——Time-MoE-main/time_moe/datasets/time_moe_dataset.py

源码:GitHub - Time-MoE/Time-MoE: [ICLR 2025 Spotlight] Official implementation of "Time-MoE: Billion-Scale Time Series Foundation Models with Mixture of Experts" 这段代码定义了一个用于时间序列数据处理的 TimeMoEDataset 类,支…...

解决SQL Server SQL语句性能问题(9)——正确使用索引

前述章节中,我们介绍和讲解了SQL调优所需要的基本知识和分析方法,那么,通过前述这些知识和方法定位到问题后,接下来,我们该怎么做呢?那就是本章的内容,给出解决SQL语句性能问题的、科学而合理的方案和方法。 本章主要对解决SQL语句性能问题的几种常用方法进行说明和讲解…...

【论文阅读】FreePCA

FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis 原文摘要 问题背景 核心挑战: 长视频生成通常依赖在短视频上训练的模型,但由于视频帧数增加会导致数…...

leetcode 383. Ransom Note

题目描述 代码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {vector<int> table(26,0);for(char ch : magazine){table[ch-a];}for(char ch : ransomNote){table[ch-a]--;if(table[ch-a] < 0)return false;}return true;} };...

SAF利用由Varjo和AFormX开发的VR/XR模拟器推动作战训练

通过将AFormX的先进军用飞行模拟器与Varjo的行业领先的VR/XR硬件相结合&#xff0c;斯洛文尼亚武装部队正以经济高效、沉浸式的训练方式培训战斗机飞行员&#xff0c;以提高其战术准备和作战效率。 挑战&#xff1a;获得战术军事航空训练的机会有限 军事航空训练长期以来一直…...

基于公共卫生大数据收集与智能整合AI平台构建测试:从概念到实践

随着医疗健康数据的爆发式增长,如何有效整合、分析和利用这些数据已成为公共卫生领域的重要挑战。传统方法往往难以应对数据的复杂性、多样性和海量性,而人工智能技术的迅猛发展为解决这些挑战提供了新的可能性。基于数据整合与公共卫生大数据的AI平台旨在构建一个全面的生态…...

【Pandas】pandas DataFrame clip

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.clip([lower, upper, axis, inplace])用于截…...

深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)

博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒​&#x1f338;​ 博客主页&#xff1a;羊小猪~~-CSDN博客 内容简介&#xff1a;常见目标检测算法简介​&#x1f…...

嵌套路由~

### 作业 - App.vue vue <script setup></script> <template> <router-link to"/home">首页</router-link> <router-link to"/profile">个人资料</router-link> <router-link to"/posts"&g…...

影楼精修-牙齿美型修复算法解析

本文介绍影楼修图中的牙齿美型修复功能的算法实现。 我们大部分人的牙齿看起来都可能会有一些问题&#xff0c;比如牙齿不平整&#xff0c;大门牙&#xff0c;牙齿泛黄&#xff0c;牙齿发黑&#xff0c;牙齿残缺等等&#xff0c;拍照之后影响美观度&#xff0c;正是这个爱美的…...

k8s之ingress

在前面我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort 和 LoadBalance,但是这两种方式,都有一定的缺点 NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就更加明显,L4转发,无法根据http header和path进行路由转发…...

PDF文档解析新突破:图表识别、公式还原、手写字体处理,让AI真正读懂复杂文档!

要想LLM大模型性能更佳&#xff0c;我们需要喂给模型看得懂的高质量数据。那有没有一种方法&#xff0c;能让我们把各种文档“读懂”&#xff0c;再喂给大模型使用呢&#xff1f; 如果你用传统OCR工具直接从PDF中提取文本&#xff0c;结果往往是乱序、缺失、格式错乱。因为实际…...

Ubuntu 第11章 网络管理_常用的网络配置命令

为了管理网络&#xff0c;Linux提供了许多非常有用的网络管理命令。利用这些命令&#xff0c;一方面可以有效地管理网络&#xff0c;另一方面出现网络故障时&#xff0c;可以快速进行诊断。本节将对Ubuntu提供的网络管理命令进行介绍。 11.2.1 ifconfig命令 关于ifconfig命令&…...

C++ 观察者模式详解

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了对象间的一对多依赖关系&#xff0c;当一个对象&#xff08;主题&#xff09;状态改变时&#xff0c;所有依赖它的对象&#xff08;观察者&#xff09;都会自动得到通知并更新。 核…...

不止是UI库:React如何重塑前端开发范式?

React&#xff1a;引领现代前端开发的声明式UI库 在当今快速发展的前端世界&#xff0c;React以其声明式、组件化和高效的特性&#xff0c;稳坐头把交椅&#xff0c;成为构建交互式用户界面的首选JavaScript库。本文将带你快速了解React的核心魅力、主要优势以及生态发展&…...

MapReduce报错 HADOOP_HOME and hadoop.home.dir are unset.

运行课程讲解内容出现这个报错&#xff1a; 1、在电脑里解压之前发过的Hadoop安装包 2、配置用户变量 3、配置系统变量 4、配置系统Path变量 5、下载链接的两个文件&#xff1a; 链接: https://pan.baidu.com/s/1aCcpGGR1EE4hEZW624rFmQ?pwd56tv 提取码: 56tv –来自百度…...

深入探索Laravel框架中的Blade模板引擎

Laravel是一个广泛使用的PHP框架&#xff0c;以其简洁、优雅和强大的功能著称。Blade是Laravel内置的模板引擎&#xff0c;提供了一套简洁而强大的模板语法&#xff0c;帮助开发者轻松构建视图层。本文将深入探讨Blade模板引擎的特性、使用方法和最佳实践。 1. Blade模板引擎简…...

分析NVIDIA的股价和业绩暴涨的原因

NVIDIA自2016年以来股价与业绩的持续高增长&#xff0c;是多重因素共同作用的结果。作为芯片行业的领军企业&#xff0c;NVIDIA抓住了技术、战略、市场与行业趋势的机遇。以下从技术创新、战略布局、市场需求、财务表现及外部环境等维度&#xff0c;深入分析其成功原因&#xf…...

P2572 [SCOI2010] 序列操作 Solution

Description 给定 01 01 01 序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;并定义 f ( l , r ) [ ( ∑ i l r a i ) r − l 1 ] f(l,r)[(\sum\limits_{il}^r a_i)r-l1] f(l,r)[(il∑r​ai​)r−l1]. 执行 m m m 个操作&am…...

初等数论--欧拉函数积性的证明

文章目录 1. 简介2. 证明一&#xff1a;唯一分解定理容斥原理3. 证明二&#xff1a;中国剩余定理4. 引理证明5. 参考 1. 简介 欧拉函数 ϕ ( n ) \phi(n) ϕ(n)表示在小于等于 n n n的正整数中与 n n n互质的个数。 如 ϕ ( 6 ) 2 ( 1 5 ) ϕ ( 12 ) 4 ( 1 5 7 11 ) \phi(…...

MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议

核心定义 MCP&#xff08;Model Context Protocol&#xff09;是专为LLM&#xff08;大语言模型&#xff09;应用设计的标准化协议&#xff0c;通过安全可控的方式向AI应用暴露数据和功能。主要提供以下能力&#xff1a; 标准化的上下文管理安全的功能调用接口跨平台的数据交…...

Midscene.js Chrome 插件实战:AI 驱动的 UI 自动化测试「喂饭教程」

Midscene.js Chrome 插件实战:AI 驱动的 UI 自动化测试「喂饭教程」 前言一、Midscene.js 简介二、环境准备与插件安装1. 安装 Chrome 插件2. 配置模型与 API Key三、插件界面与功能总览四、实战演练:用自然语言驱动网页自动化1. 典型场景一(Action):账号登录步骤一:打开…...

Python在大数据机器学习模型的多模态融合:深入探索与实践指南

一、多模态融合的全面概述 1.1 多模态融合的核心概念 多模态融合(Multimodal Fusion)是指将来自不同传感器或数据源(如图像、文本、音频、视频、传感器数据等)的信息进行有效整合,以提升机器学习模型的性能和鲁棒性。在大数据环境下,多模态融合面临着独特的挑战和机遇: 数…...

C++ 访问者模式详解

访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为设计模式&#xff0c;它允许你将算法与对象结构分离&#xff0c;使得可以在不修改现有对象结构的情况下定义新的操作。 核心概念 设计原则 访问者模式遵循以下设计原则&#xff1a; 开闭原则&#xff1a;可以添…...

实验-有限状态机2(数字逻辑)

目录 一、实验内容 1.1 介绍 1.2 内容 二、实验步骤 2.1 电路原理图 2.2 步骤 2.3 状态图 4.4 状态转换表和输出表 2.5 具体应用场景 三、调试 四、实验使用环境 五、实验小结与思考 5.1 遇到的问题及解决方法 5.2 实验收获 一、实验内容 1.1 介绍 在解决更复…...

IC解析之TPS92682-Q1(汽车LED灯控制IC)

目录 1 IC特性介绍2 主要参数3 接口定义4 工作原理分析TPS92682-Q1架构工作模式典型应用通讯协议 控制帧应答帧协议5 总结 1 IC特性介绍 TPS92682 - Q1 是德州仪器&#xff08;TI&#xff09;推出的一款双通道恒压横流控制器&#xff0c;同时还具有各种电器故障保护&#xff0c…...

数据结构-堆

目录 heapq 导入 初始化 插入元素 返回最小值 PriorityQueue 导入 初始化 入队 出队 堆是一颗树&#xff0c;其每个节点都有一个值&#xff0c;且&#xff08;小根堆&#xff1a;每个父节点都小于等于其子节点 &#xff08;在进树时不断进行比较 STL中的 priority…...

提升编程效率的利器:Zed高性能多人协作代码编辑器

在当今这个快节奏的开发环境中&#xff0c;一个高效、灵活的代码编辑器无疑对开发者们起着至关重要的支持作用。Zed&#xff0c;作为来自知名编辑器Atom和语法解析器Tree-sitter的创造者的心血之作&#xff0c;正是这样一款高性能支持多人合作的编辑神器。本文将带领大家深入探…...

【25软考网工】第六章 网络安全(1)网络安全基础

博客主页&#xff1a; christine-rr-CSDN博客 专栏主页&#xff1a; 软考中级网络工程师笔记 大家好&#xff0c;我是christine-rr !目前《软考中级网络工程师》专栏已经更新二十多篇文章了&#xff0c;每篇笔记都包含详细的知识点&#xff0c;希望能帮助到你&#xff01; 今日…...

Java中的包装类

目录 为什么要有包装类 包装类的作用 基本数据类型和包装类的对应关系 包装类的核心功能 装箱&#xff08;Boxing&#xff09;和拆箱&#xff08;Unboxing&#xff09; 装箱&#xff1a; 拆箱&#xff1a; 类型转换 字符串<----->基本类型 进制转换 自动装箱与…...

催缴机器人如何实现停车费追缴“零遗漏”?

面对高达35%的停车欠费率&#xff0c;传统人工催缴模式因效率低、成本高、覆盖有限等问题&#xff0c;难以应对海量欠费订单的挑战。本文带大家探究“催缴机器人”如何实现停车费追缴“零遗漏”&#xff0c;实现从“被动催缴”到“主动管理”的跨越。 智慧停车欠费自动化追缴系…...

Oracle 执行计划中的 ACCESS 和 FILTER 详解

Oracle 执行计划中的 ACCESS 和 FILTER 详解 在 Oracle 执行计划中&#xff0c;ACCESS 和 FILTER 是两个关键的操作类型&#xff0c;它们描述了 Oracle 如何检索和处理数据。理解这两个概念对于 SQL 性能调优至关重要。 ACCESS&#xff08;访问&#xff09; ACCESS 表示 Ora…...

使用FastAPI微服务在AWS EKS中构建上下文增强型AI问答系统

系统概述 本文介绍如何使用FastAPI在AWS Elastic Kubernetes Service (EKS)上构建一个由多个微服务组成的AI问答系统。该系统能够接收用户输入的提示(prompt)&#xff0c;通过调用其他微服务从AWS ElastiCache on Redis和Amazon DynamoDB获取相关上下文&#xff0c;然后利用AW…...

oracle dblink varchar类型查询报错记录

在使用Oracle DBLink&#xff08;数据库链接&#xff09;查询VARCHAR类型数据时&#xff0c;有时会遇到报错问题。这些错误可能与数据类型转换、字符集设置、数据库版本兼容性等因素有关。本文将详细分析常见的报错原因及其解决方法。 一、常见报错及其原因 1. ORA-01722: in…...

计算人声录音后电平的大小(dB SPL->dBFS)

计算人声录音后电平的大小 这里笔记记录一下&#xff0c;怎么计算已知大小的声音&#xff0c;经过麦克风、声卡录制后软件内录得的音量电平值。&#xff08;文章最后将计算过程整理为Python代码&#xff0c;方便复用&#xff09; 假设用正常说话的声音大小65dB&#xff08;SP…...

Android kernel日志中healthd关键词意义

Android kernel日志中healthd关键词意义 在kernel的healthd日志中会打印电池信息。通常比较关心的是电池温度&#xff0c;剩余电量&#xff0c;电压&#xff0c;电池健康&#xff0c;电池状况等。 level&#xff1a;剩余电量。 voltage&#xff1a;电压。 temperature&#xff…...

操作系统面试问题(4)

32.什么是操作系统 操作系统是一种管理硬件和软件的应用程序。也是运行在计算机中最重要的软件。它为硬件和软件提供了一种中间层&#xff0c;让我们无需关注硬件的实现&#xff0c;把心思花在软件应用上。 通常情况下&#xff0c;计算机上会运行着许多应用程序&#xff0c;它…...

【nestjs】一般学习路线

nestjs中文文档 其实几个月前也对nestjs进行了学习&#xff0c;前前后后看了很多文档、博客&#xff0c;另外也找了相应的代码看了&#xff0c;但最后也还是一知半解&#xff0c;只是知道大概怎么写&#xff0c;怎么用。 这次下定决心再次看一遍&#xff0c;从代码学习到文档…...