各位观众老爷们,晚上好!今儿咱们来聊聊Python操作MongoDB的利器——PyMongo。这次的重点是PyMongo的连接池和aggregation管道,保证让大家听得懂,学得会,用得上!
一、PyMongo连接池:让连接不再“一锤子买卖”
话说,咱们写程序,尤其是涉及到数据库操作的时候,最忌讳的就是频繁地建立和关闭连接。这就像古代打仗,每次都得现磨刀枪,效率能高吗?PyMongo的连接池就是解决这个问题的。它维护着一个连接的“池子”,需要连接的时候就从池子里拿一个,用完了再放回去,避免了频繁地创建和销毁连接,大大提高了效率。
-
啥是连接池?
简单来说,连接池就是预先创建好的一堆数据库连接,放在那里备用。当你的程序需要连接数据库的时候,直接从池子里取一个连接用,用完了再放回去。这样就避免了每次都重新建立连接的开销。
-
PyMongo的连接池是如何工作的?
PyMongo默认就使用了连接池,而且是自动管理的。你只需要创建MongoDB客户端的时候指定一些参数,就可以控制连接池的行为。
from pymongo import MongoClient # 创建MongoClient实例,连接池会自动创建和管理 client = MongoClient('mongodb://localhost:27017/', maxPoolSize=20, connectTimeoutMS=30000) # 获取数据库和集合 db = client['mydatabase'] collection = db['mycollection'] # 进行数据库操作 collection.insert_one({'name': 'Alice', 'age': 30}) # 连接用完后,会自动放回连接池,无需手动关闭 # 注意:client对象在程序结束时才需要关闭,或者用with语句块自动关闭
上面的代码中,
maxPoolSize=20
指定了连接池的最大连接数为20,connectTimeoutMS=30000
指定了连接超时时间为30秒。 -
连接池的参数详解
参数名 描述 默认值 maxPoolSize
连接池中允许的最大连接数。如果达到最大连接数,新的连接请求将会阻塞,直到有连接被释放。 100 minPoolSize
连接池中保持的最小连接数。即使没有客户端在使用连接,连接池也会保持至少 minPoolSize
个连接处于可用状态。0 connectTimeoutMS
连接超时时间,单位是毫秒。如果在指定的时间内无法建立连接,将会抛出异常。 30000 (30秒) socketTimeoutMS
Socket超时时间,单位是毫秒。如果在指定的时间内没有从Socket读取到数据,将会抛出异常。 None (无限) waitQueueTimeoutMS
如果连接池已满,新的连接请求将会排队等待。 waitQueueTimeoutMS
指定了等待超时时间,单位是毫秒。如果在指定的时间内没有获取到连接,将会抛出异常。1000 * 60 (1分钟) waitQueueMultiple
waitQueueTimeoutMS
=waitQueueMultiple
*connectTimeoutMS
. 在PyMongo 4.0
中已弃用,不推荐使用1 注意:
waitQueueMultiple
参数在PyMongo 4.0
已经被废弃,不再推荐使用。 -
使用
with
语句管理连接为了更优雅地管理连接,可以使用
with
语句。with
语句块会在代码块执行完毕后自动关闭连接,即使发生异常也能保证连接被正确释放。from pymongo import MongoClient with MongoClient('mongodb://localhost:27017/', maxPoolSize=20) as client: db = client['mydatabase'] collection = db['mycollection'] collection.insert_one({'name': 'Bob', 'age': 40}) # 在with语句块结束后,连接会自动关闭
二、Aggregation管道:数据的“变形金刚”
Aggregation管道是MongoDB中强大的数据处理工具,它可以对数据进行各种各样的转换、过滤、分组、排序等操作。你可以把它想象成一个流水线,数据经过流水线上的各个“工位”,最终得到你想要的结果。
-
啥是Aggregation管道?
Aggregation管道是一个由多个阶段(stage)组成的序列,每个阶段对输入的数据进行处理,并将处理结果传递给下一个阶段。通过组合不同的阶段,可以实现复杂的数据处理逻辑。
-
Aggregation管道的基本结构
Aggregation管道的基本结构如下:
[ { <stage1> }, { <stage2> }, { <stageN> } ]
每个
stage
是一个JSON文档,描述了要执行的操作。 -
常用的Aggregation管道阶段
| 阶段名称 | 描述 | 示例 |
| ————- | ——————————————————————————————————————————————- | —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000