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

Python 操作 MongoDB 教程

一、引言

在当今数字化时代,数据的存储和管理至关重要。传统的关系型数据库在处理一些复杂场景时可能会显得力不从心,而 NoSQL 数据库应运而生。MongoDB 作为一款开源的、面向文档的 NoSQL 数据库,凭借其高性能、高可扩展性和灵活的数据模型,在众多领域得到了广泛应用。Python 作为一门功能强大且易于学习的编程语言,拥有丰富的库和工具。pymongo 库为 Python 与 MongoDB 之间搭建了一座桥梁,使得开发者可以方便地在 Python 代码中操作 MongoDB 数据库。本教程将详细介绍如何在 Python 中使用 pymongo 库来操作 MongoDB,从基础的连接、数据操作到高级的索引和聚合操作,让你全面掌握 Python 与 MongoDB 的结合使用。

二、MongoDB 概念介绍

2.1 数据模型

MongoDB 采用面向文档的数据模型,数据以文档(Document)的形式存储。文档是一个由键值对组成的结构,类似于 Python 中的字典,使用 BSON(Binary JSON)格式存储,它是 JSON 的二进制扩展,支持更多的数据类型,如日期、二进制数据等。多个相关的文档组成一个集合(Collection),类似于关系数据库中的表。而多个集合则构成一个数据库(Database)。

2.2 应用场景

  • 内容管理系统:可以轻松存储和管理各种类型的内容,如文章、图片、视频等,并且可以灵活地扩展文档结构以适应不同的内容需求。
  • 日志记录:处理大量的日志数据,由于其高性能的写入能力和灵活的数据模型,能够快速存储日志信息,并方便后续的查询和分析。
  • 实时分析:对于需要实时处理和分析数据的场景,MongoDB 可以高效地存储和处理实时数据,支持复杂的查询和聚合操作。
  • 移动应用后端:为移动应用提供数据存储和管理服务,支持多设备的数据同步和实时更新。

三、安装与环境准备

3.1 安装 MongoDB

首先,你需要在本地或者服务器上安装 MongoDB 数据库。可以从 MongoDB 官方网站(Download MongoDB Community Server | MongoDB)下载适合你操作系统的安装包,并按照安装向导进行安装。安装完成后,启动 MongoDB 服务。

3.2 安装 pymongo 库

使用 pip 命令来安装 pymongo 库: 

pip install pymongo

四、连接到 MongoDB

在 Python 中使用 pymongo 连接到 MongoDB 服务器非常简单,以下是一个示例代码:

from pymongo import MongoClient# 创建一个 MongoClient 对象,连接到本地的 MongoDB 服务器,默认端口为 27017
client = MongoClient('mongodb://localhost:27017/')# 选择一个数据库,如果该数据库不存在,MongoDB 会在插入数据时自动创建
db = client['test_database']

 五、集合操作

在 MongoDB 中,数据以集合(类似于关系数据库中的表)的形式组织。以下是一些常见的集合操作示例:

5.1 创建集合

# 创建一个名为 test_collection 的集合
# 如果集合不存在,MongoDB 会在插入数据时自动创建
collection = db['test_collection']

5.2 查看所有集合

# 获取数据库中的所有集合名称
collection_names = db.list_collection_names()
print("数据库中的所有集合名称:", collection_names)

5.3 删除集合

# 删除 test_collection 集合
db['test_collection'].drop()
print("test_collection 集合已删除")

六、文档操作

在 MongoDB 中,数据以文档(类似于关系数据库中的行)的形式存储在集合中。文档是一个由键值对组成的 BSON 对象。

6.1 插入文档

# 插入单个文档
# 定义一个文档,包含姓名、年龄和城市信息
document = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 使用 insert_one 方法插入单个文档
result = collection.insert_one(document)
print(f"插入的单个文档 ID: {result.inserted_id}")# 插入多个文档
# 定义一个包含多个文档的列表
documents = [{'name': 'Bob', 'age': 30, 'city': 'Los Angeles'},{'name': 'Charlie', 'age': 35, 'city': 'Chicago'}
]
# 使用 insert_many 方法插入多个文档
result = collection.insert_many(documents)
print(f"插入的多个文档 ID: {result.inserted_ids}")

6.2 查询文档

# 查询单个文档
# 定义查询条件,查找姓名为 Alice 的文档
query = {'name': 'Alice'}
# 使用 find_one 方法查询单个文档
result = collection.find_one(query)
print("查询到的单个文档:", result)# 查询多个文档
# 定义查询条件,查找年龄大于 28 的文档
results = collection.find({'age': {'$gt': 28}})
print("查询到的多个文档:")
for result in results:print(result)

6.3 更新文档

# 更新单个文档
# 定义查询条件,查找姓名为 Alice 的文档
filter_query = {'name': 'Alice'}
# 定义更新操作,将年龄更新为 26
update_query = {'$set': {'age': 26}}
# 使用 update_one 方法更新单个文档
result = collection.update_one(filter_query, update_query)
print(f"更新的单个文档数量: {result.modified_count}")# 更新多个文档
# 定义查询条件,查找城市为 New York 的文档
filter_query = {'city': 'New York'}
# 定义更新操作,将年龄加 1
update_query = {'$inc': {'age': 1}}
# 使用 update_many 方法更新多个文档
result = collection.update_many(filter_query, update_query)
print(f"更新的多个文档数量: {result.modified_count}")

6.4 删除文档

# 删除单个文档
# 定义查询条件,查找姓名为 Alice 的文档
filter_query = {'name': 'Alice'}
# 使用 delete_one 方法删除单个文档
result = collection.delete_one(filter_query)
print(f"删除的单个文档数量: {result.deleted_count}")# 删除多个文档
# 定义查询条件,查找年龄小于 30 的文档
filter_query = {'age': {'$lt': 30}}
# 使用 delete_many 方法删除多个文档
result = collection.delete_many(filter_query)
print(f"删除的多个文档数量: {result.deleted_count}")

七、索引操作

索引可以提高查询性能,以下是创建和删除索引的示例:

7.1 创建索引

# 在 name 字段上创建升序索引
# 提高根据姓名查询文档的性能
collection.create_index([('name', 1)])
print("在 name 字段上创建了升序索引")

7.2 删除索引

# 删除 name 字段上的索引
collection.drop_index('name_1')
print("删除了 name 字段上的索引")

八、聚合操作

聚合操作是 MongoDB 提供的一个强大功能,它允许我们对数据进行复杂的处理和分析,如分组、统计、排序等。

聚合操作通过聚合管道(Aggregation Pipeline)来实现,聚合管道由多个阶段(Stage)组成,每个阶段对输入的文档进行特定的处理,并将处理结果传递给下一个阶段。常见的阶段包括 $match(筛选文档)、$group(分组)、$project(投影)、$sort(排序)、$limit(限制结果数量)等。

以下是一个简单的聚合管道示例,用于按城市分组并统计每个城市的文档数量:

from pymongo import MongoClient# 连接到 MongoDB 服务器
client = MongoClient('mongodb://localhost:27017/')
# 选择数据库
db = client['test_database']
# 选择集合
collection = db['test_collection']pipeline = [{'$group': {'_id': '$city', 'count': {'$sum': 1}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

 8.1 结合 $match 和 $group 进行筛选和分组

假设我们想要统计年龄大于 25 岁的人在每个城市的数量。可以先使用 $match 阶段筛选出年龄大于 25 岁的文档,再使用 $group 阶段按城市分组并统计数量。

pipeline = [{'$match': {'age': {'$gt': 25}}},{'$group': {'_id': '$city', 'count': {'$sum': 1}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

8.2 使用 $project 进行投影操作

投影操作可以选择要返回的字段,还可以对字段进行计算和重命名。以下示例将返回每个文档的姓名和年龄,并将年龄乘以 2 后重命名为 double_age

pipeline = [{'$project': {'name': 1, 'double_age': {'$multiply': ['$age', 2]}, '_id': 0}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

 8.3 结合 $sort 进行排序

假设我们想要按年龄降序排列文档,并返回前 2 条记录。可以使用 $sort 阶段进行排序,再使用 $limit 阶段限制结果数量。

pipeline = [{'$sort': {'age': -1}},{'$limit': 2}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

8.4 计算平均值

使用 $group 和 $avg 操作符可以计算某个字段的平均值。以下示例计算所有人的平均年龄。

pipeline = [{'$group': {'_id': None, 'average_age': {'$avg': '$age'}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

 8.5 字符串拼接

在 $project 阶段可以使用 $concat 操作符进行字符串拼接。以下示例将姓名和城市拼接成一个新的字段 info

pipeline = [{'$project': {'info': {'$concat': ['$name', ' lives in ', '$city']}, '_id': 0}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

8.6 多级分组

可以进行多级分组操作,例如先按城市分组,再按年龄范围分组。以下示例将数据先按城市分组,再在每个城市中按年龄是否大于 30 岁进行分组,并统计数量。 

pipeline = [{'$group': {'_id': {'city': '$city','age_group': {'$cond': [{'$gt': ['$age', 30]}, 'Over 30', 'Under 30']}},'count': {'$sum': 1}}}
]
results = collection.aggregate(pipeline)
for result in results:print(result)

8.7 使用 $lookup 进行关联查询

假设我们有两个集合:orders 和 productsorders 集合中的每个文档包含一个 product_id 字段,用于关联 products 集合中的产品信息。可以使用 $lookup 阶段进行关联查询,将两个集合的数据进行合并。

# 假设已经有 orders 和 products 集合
orders_collection = db['orders']
products_collection = db['products']pipeline = [{'$lookup': {'from': 'products','localField': 'product_id','foreignField': '_id','as': 'product_info'}}
]
results = orders_collection.aggregate(pipeline)
for result in results:print(result)

 8.8、聚合小结

MongoDB 的聚合操作提供了丰富而强大的功能,通过不同阶段的组合,可以对数据进行各种复杂的处理和分析。这里通过多个范例展示了聚合操作在筛选、分组、投影、排序、计算统计值、字符串处理、关联查询等方面的应用。在实际项目中,你可以根据具体需求灵活运用这些范例,结合不同的阶段和操作符,实现更复杂的数据处理和分析任务。希望这些范例能帮助你更好地掌握 MongoDB 的聚合操作,提升数据处理和分析的能力。

九、总结

通过本教程,你全面学习了如何在 Python 中使用 pymongo 库来连接 MongoDB 服务器,进行集合和文档的操作,创建和删除索引,以及使用聚合框架进行数据处理。MongoDB 的灵活性和高性能使其成为处理非结构化数据的理想选择,结合 Python 的强大功能,可以开发出高效的数据处理应用程序。在实际项目中,你可以根据具体需求灵活运用这些操作,充分发挥 MongoDB 和 Python 的优势。

相关文章:

Python 操作 MongoDB 教程

一、引言 在当今数字化时代,数据的存储和管理至关重要。传统的关系型数据库在处理一些复杂场景时可能会显得力不从心,而 NoSQL 数据库应运而生。MongoDB 作为一款开源的、面向文档的 NoSQL 数据库,凭借其高性能、高可扩展性和灵活的数据模型…...

长安汽车发布“北斗天枢2.0”计划,深蓝汽车普及全民智驾

2月9日,长安汽车智能化战略“北斗天枢2.0”计划暨深蓝汽车全场景智能驾驶解决方案发布会在重庆盛大召开。此次发布会标志着长安汽车正式迈入智能化战略的新纪元,携手众多“中国智驾合伙人”,共同开启全民智驾元年。 发布会上,长安…...

SpringBoot速成(七)注册实战P2-P4

1.创建 数据库创建 依赖引入 <!-- mybatis起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency> <…...

大语言模型RAG,transformer

1、RAG技术流总结 第一张图是比较经典的RAG知识图谱&#xff0c;第二张图是更加详细扎实的介绍图。 1.1 索引 坦白来说这部分的技术并不是大模型领域的&#xff0c;更像是之前技术在大模型领域的应用&#xff1b;早在2019年我就做过faiss部分的尝试&#xff0c;彼时索引技术已…...

Crowdin 在线本地化平台调用硅基流动AI预翻译

平台介绍 硅基流动&#xff08;AI服务平台&#xff09; 官网&#xff1a;https://siliconflow.cn/zh-cn/ 官方介绍 我主要使用&#xff1a;云服务平台 SilliconCloud 此平台已经将热门的开源大语言模型部署&#xff0c;花钱买额度&#xff0c;就能使用 API 最近有上线 Deep…...

第5章 数据库系统(选择|案例|论文)(重点★★★★★)

5.1 数据库管理系统1 数据库是长期存储在计算机内的、有组织的、可共享的数据集合&#xff0c;数据库系统是指在计算机信息系统中引入数据库后的系统&#xff0c;一般由数据库、数据库管理系统 (DataBaseManagement System&#xff0c;DBMS)、应用系统、数据库管理员(DataBase…...

linux部署node服务

1、安装nvm管理node版本 # 下载、解压到指定目录 wget https://github.com/nvm-sh/nvm/archive/refs/tags/v0.39.1.tar.gz tar -zxvf nvm-0.39.0.tar.gz -C /opt/nvm # 配置环境 vim ~/.bashrc~&#xff1a;这是一个路径简写符号&#xff0c;代表当前用户的主目录。在大多数 …...

【AI赋能】蓝耘智算平台实战指南:3步构建企业级DeepSeek智能助手

蓝耘智算平台实战指南&#xff1a;3步构建企业级DeepSeek智能助手 引言&#xff1a;AI大模型时代的算力革命 在2025年全球AI技术峰会上&#xff0c;DeepSeek-R1凭借其开源架构与实时推理能力&#xff0c;成为首个通过图灵测试的中文大模型。该模型在语言理解、跨模态交互等维…...

hyperf知识问题汇总

1、简单说下 hyperf&#xff08;什么是 hyperf&#xff09; 答&#xff1a;hyperf 是一个依赖swoole扩展的 php 开源开发框架&#xff0c;它由黄朝辉团队设计创建维护&#xff0c;具备简洁而强大的组件和超强的并发性能&#xff0c;而且还支持微服务架构&#xff0c;例如&…...

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA data source1: BH coordination tabledata source2:BH layer tableprocess 1:Collect BH List To Layer Tableprocess 2:match Reduced Level from "Layer"+"BH"data source1: BH coordination…...

DeepSeek-R1技术革命:用强化学习重塑大语言模型的推理能力

引言&#xff1a;低成本高性能的AI新范式 在2025年1月&#xff0c;中国AI公司DeepSeek发布了两个标志性模型——DeepSeek-R1-Zero与DeepSeek-R1&#xff0c;以仅600万美元的训练成本实现了与OpenAI O1系列&#xff08;开发成本约5亿美元&#xff09;相当的推理性能&#xff0c…...

SQLite 约束

SQLite 约束 SQLite 是一种轻量级的数据库管理系统,它以其简洁的设计和高效的性能在众多数据库系统中脱颖而出。在SQLite中,约束是一种用于确保数据完整性和一致性的机制。本文将详细介绍SQLite中的各种约束,包括它们的用途、语法以及在实际应用中的注意事项。 1. 约束概述…...

Vue.js 状态管理库Pinia

Pinia Pinia &#xff1a;Vue.js 状态管理库Pinia持久化插件-persist Pinia &#xff1a;Vue.js 状态管理库 Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。 要使用Pinia &#xff0c;先要安装npm install pinia在main.js中导入Pinia 并使用 示例…...

qwen2.5-vl-7B视觉大模型 私有化部署webUI

服务器选用&#xff1a;算力云 部署qwen2.5-vl-7B&#xff0c;24g显卡跑不起图&#xff0c;单问问题就占20g左右。有能力可以用大点的显卡 一、下载模型 Qwen2.5-VL-7B-Instruct 有conda &#xff0c;可以在conda下操作&#xff0c;不知道conda的同学可以参考本博主之前的文章…...

Spring Boot 线程池自定义拒绝策略:解决任务堆积与丢失问题

如何通过自定义线程池提升系统稳定性 背景 在高并发系统中&#xff0c;线程池管理至关重要。默认线程池可能导致&#xff1a; 资源浪费&#xff08;创建过多线程导致 OOM&#xff09;任务堆积&#xff08;队列满后任务被拒绝&#xff09;任务丢失&#xff08;默认拒绝策略丢…...

C++17 新特性解析

C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...

支持向量机相关文献

根据最新的研究动态和文献综述&#xff0c;当前支持向量机&#xff08;SVM&#xff09;的研究方向和内容主要集中在以下几个方面&#xff1a; 1. 提高训练效率 并行计算与分布式计算&#xff1a;随着数据规模的增加&#xff0c;SVM的训练时间往往较长&#xff0c;难以满足实时…...

线上hbase rs 读写请求个数指标重置问题分析

问题描述: 客户想通过调用hbase的jmx接口获取hbase的读写请求个数,以此来分析HBase读写请求每日增量。 但是发现生产,测试多个集群,Hbase服务指标regionserver读写请求个数存在突然下降到0或者大幅度下降情况。 需要排查原因: 某个Region的读写请求数:会发现经常会重置为…...

USB子系统学习(四)用户态下使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试6、其它 1、声明 本文是在学习韦东山《驱动大全》USB子系统时&#xff0c;为梳理知识点和自己回看而记录&#xff0c;全部内容高度复制粘贴。 韦老师的《驱动大全》&#xff1a;商…...

WPF 设置宽度为 父容器 宽度的一半

方法1&#xff1a;使用 绑定和转换器 实现 创建类文件 HalfWidthConverter public class HalfWidthConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is double width){return width / 4…...

网络工程师 (30)以太网技术

一、起源与发展 以太网技术起源于20世纪70年代&#xff0c;最初由Xerox公司的帕洛阿尔托研究中心&#xff08;PARC&#xff09;开发。最初的以太网采用同轴电缆作为传输介质&#xff0c;数据传输速率为2.94Mbps&#xff08;后发展为10Mbps&#xff09;&#xff0c;主要用于解决…...

2025.2.11

1> 制作一个闹钟软件 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QTime> #include <QTimer> #include <QTimeEdit> #include <QDa…...

HTML应用指南:利用POST请求获取接入比亚迪业态的充电桩位置信息

在新能源汽车快速发展的今天,充电桩的分布和可用性成为了影响用户体验的关键因素之一。比亚迪作为全球领先的新能源汽车制造商,不仅在车辆制造方面取得了卓越成就,也在充电基础设施建设上投入了大量资源。为了帮助用户更方便地找到比亚迪充电桩的位置,本篇文章,我们将探究…...

系统URL整合系列视频四(需求介绍补充)

视频 系统URL整合系列视频四&#xff08;需求补充说明&#xff09; 视频介绍 &#xff08;全国&#xff09;大型分布式系统Web资源URL整合需求&#xff08;补充&#xff09;讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格&#xff0c;控制粒度也越来越细。…...

PRC框架-Dubbo

RPC框架 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;框架是一种允许客户端通过网络调用服务器端程序的技术。以下是常见的RPC框架及其特点&#xff1a; 1. 基于HTTP/REST的RPC框架 特点&#xff1a;简单易用&#xff0c;与Web开发无缝集成&am…...

Win10环境借助DockerDesktop部署最新MySQL9.2

Win10环境借助DockerDesktop部署最新MySQL9.2 前言 作为一杆主要撸Java的大数据平台开发攻城狮&#xff0c;必不可少要折腾各种组件&#xff0c;环境和版本一直是很头疼的事情。虽然可以借助Anaconda来托管Python的环境&#xff0c;也可以使用多个虚拟机来部署不同的环境&…...

PlantUML 总结

PlantUML 总结 1. 概述 PlantUML 是一个开源工具&#xff0c;允许用户通过简单的文本描述来生成各种UML图表。它支持多种图表类型&#xff0c;包括但不限于序列图、用例图、类图、活动图等。 2. 基本概念 2.1 开始和结束标记 startuml 和 enduml&#xff1a;用于标记Plant…...

【Elasticsearch】监控与管理:集群监控指标

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

Swift的方法派发机制

1. 静态派发&#xff08;Static Dispatch&#xff09; 静态派发在编译时确定方法的具体实现&#xff0c;调用时直接跳转到该实现。静态派发的优点是性能高&#xff0c;因为不需要运行时查找方法实现。 适用场景&#xff1a; 值类型&#xff08;Struct 和 Enum&#xff09;&am…...

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…...

6.深度学习在推荐系统中的应用

接下来我们将学习深度学习在推荐系统中的应用。深度学习技术近年来在推荐系统中得到了广泛应用&#xff0c;能够有效提升推荐系统的性能和精度。在这一课中&#xff0c;我们将介绍以下内容&#xff1a; 深度学习在推荐系统中的优势常用的深度学习推荐模型深度学习推荐系统的实…...

Leetcode - 149双周赛

目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件&#xff1a; 相邻数字互不相同两个数字的的…...

ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet

集合族谱 在这些集合中&#xff0c;仅有vector和hashtable是线程安全的&#xff0c;其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现&#xff0c;实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...

在 Windows 系统中如何快速进入安全模式的两种方法

在使用电脑的过程中&#xff0c;有时我们可能会遇到一些需要进入“安全模式”来解决的问题。安全模式是一种特殊的启动选项&#xff0c;它以最小化配置启动操作系统&#xff0c;仅加载最基本的驱动程序和服务&#xff0c;从而帮助用户诊断和修复系统问题。本文中简鹿办公将详细…...

【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】

文章目录 关于新的问题更好的解决方案Week13Mon Macros阅读材料Lab 11: Programs as Data, MacrosQ1: WWSD: QuasiquoteQ2: If ProgramQ3: Exponential PowersQ4: Repeat Wed SQL阅读材料Disc 11: MacrosQ1: Mystery MacroQ2: Multiple AssignmentQ3: Switch Optional Contest:…...

AspectJ 下 Advisor 的排序过程

在 AbstractAdvisorAutoProxyCreator#findEligibleAdvisors 方法中&#xff0c;找到 BeanFactory 中所有的 Advisor 后&#xff0c;针对当前 beanClass 进行过滤&#xff0c;筛选出符合当前 beanClass 的 Advisor&#xff0c;称之为 eligibleAdvisors。接着对 eligibleAdvisors…...

Unity 高度可扩展的技能与多 Buff 框架详解

一、框架设计 1.1 核心思想 组件化设计: 将技能和 Buff 抽象为可复用的组件&#xff0c;通过组合不同的组件实现复杂的效果。 数据驱动: 使用 ScriptableObject 或 JSON 等数据格式定义技能和 Buff 的属性&#xff0c;方便配置和修改。 事件驱动: 利用 Unity 的事件系统或自…...

机器学习中过拟合和欠拟合问题处理方法总结

目录 一、背景二、过拟合(Overfitting)2.1 基本概念2.2 过拟合4个最主要的特征2.3 防止过拟合的11个有效方法 三、欠拟合&#xff08;Underfitting&#xff09;3.1 基本概念3.2 欠拟合的4个特征3.3 防止欠拟合的11个有效方法 四、总结五、参考资料 一、背景 在机器学习模型训练…...

新一代高性能无线传输模块M-GATEWAY3

M-GATEWAY3是M3系列的通用接口模块&#xff0c;用于接收各种总线信号并将它们集成到一个系统中。该模块通过标准化传输协议XCPonETH进行输出&#xff0c;确保为各种测量应用提供无损信号。此外&#xff0c;M-GATEWAY3支持通过热点、ETH-PC或USB-C传输数据。借助M-GATEWAY3&…...

一、通义灵码插件保姆级教学-IDEA(安装篇)

JetBrains IDEA 中安装教学 第一步&#xff1a;事先准备 支持系统&#xff1a;Windows 7 ~ Windows 11、Linux、macOS&#xff1b;下载并安装兼容的 JetBrains IDEA 2020.3 及以上版本&#xff1b; 第二步&#xff1a;在 IntelliJ IDEA 中安装通义灵码 方法 1&#xff1a;通…...

【leetcode 32】1047. 删除字符串中的所有相邻重复项

Java中的queue、deque、ArrayDeque的区别 使用 Deque 作为堆栈(ArrayDeque是双端队列&#xff0c;当仅使用栈操作时push/pop&#xff0c;就是栈) class Solution {public String removeDuplicates(String s) {//使用 Deque 作为堆栈(ArrayDeque是双端队列&#xff0c;当仅使用栈…...

ubuntu 安装vnc之后,本地黑屏,vnc正常

ubuntu 安装vnc之后,本地黑屏,vnc正常 在Ubuntu系统中安装VNC服务器&#xff08;如TightVNC或RealVNC&#xff09;后&#xff0c;如果遇到连接时本地屏幕变黑的情况&#xff0c;可能是由于几种不同的配置或兼容性问题。以下是一些解决步骤&#xff0c;可以帮助你解决这个问题&…...

【实战AI】利用deepseek 在mac本地部署搭建个人知识库

之前的文章中实现了本地通过ollma 部署deepseek R1&#xff1a;14b 模型&#xff0c;这里我想继续实现个人知识库&#xff0c;方便自己文档&#xff0c;数据的检索&#xff1b; 下载anythingLLM 地址&#xff1a; https://anythingllm.com/desktop 下载安装即可&#xff1b…...

ASP.NET Core的贫血模型与充血模型

目录 概念 需求 贫血模型 充血模型 总结 概念 贫血模型&#xff1a;一个类中只有属性或者成员变量&#xff0c;没有方法。充血模型&#xff1a;一个类中既有属性、成员变量&#xff0c;也有方法。 需求 定义一个类保存用户的用户名、密码、积分&#xff1b;用户必须具有…...

java基础6(黑马)

一、static 1.static修饰成员变量 static&#xff1a;叫静态&#xff0c;可以修饰成员变量、成员方法。 成员变量按照有无static&#xff0c;分两种。 类变量&#xff1a;有static修饰&#xff0c;属于类&#xff0c;在计算机中只有一份&#xff0c;会被类的全部对象共享。…...

LabVIEW外延片光致发光(PL)扫描系统

本文介绍了基于LabVIEW的PL扫描系统的开发过程&#xff0c;包括硬件选型&#xff08;如ECOPIA激光器、EPP2000光谱仪&#xff09;、软件架构&#xff08;多线程控制、动态显示&#xff09;、环境适配&#xff08;温湿度控制、防震&#xff09;等关键设计。结合工业需求&#xf…...

安装Jenkins

Linux中安装jenkins 采用RPM安装包方式&#xff1a;Jenkins安装包下载地址 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm执行安装 rpm -ivh jenkins-2.190.1-1.1.noarch.rpm修改配置文件&#xff1a; vi /etc/sysconfig/jenkins修改内容&…...

开发中常用的快捷键

开发中常用的快捷键 浏览器开发工具ideavscode 浏览器 清除浏览器的缓存&#xff1a;ctrl shift delete 开发工具 idea 前端JS代码格式化&#xff1a;ctrl alt L vscode...

前端如何判断浏览器 AdBlock/AdBlock Plus(最新版)广告屏蔽插件已开启拦截

2个月前AdBlock/AdBlock Plus疑似升级了一次 因为自己主要负责面对海外的用户项目&#xff0c;发现以前的检测AdBlock/AdBlock Plus开启状态方法已失效了&#xff0c;于是专门研究了一下。并尝试了很多方法。 已失效的老方法 // 定义一个检测 AdBlock 的函数 function chec…...

ASP.NET Core 如何使用 C# 向端点发出 POST 请求

使用 C#&#xff0c;将 JSON POST 到 REST API 端点&#xff1b;如何从 REST API 接收 JSON 数据。 本文需要 ASP .NET Core&#xff0c;并兼容 .NET Core 3.1、.NET 6和.NET 8。 要从端点获取数据&#xff0c;请参阅本文。 使用 . 将 JSON 数据发布到端点非常容易HttpClien…...