Python中MongoClient销毁前是否会持续维护对应的Collection对象?
问题1解答
- 执行
self.db[col_name]获取集合的操作全程在本地内存完成,不会向MongoDB服务端发送任何请求,不存在每次拉取集合信息的情况。 - Collection是pymongo封装的轻量代理对象,仅存储关联的数据库实例、集合名称等基础元数据,创建过程没有额外网络开销。
- MongoClient不会全局维护所有生成过的Collection实例,实例的生命周期由你的代码持有关系决定,不会被MongoClient一直占用直到实例销毁。
class MyMongo(MongoClient): ... def find_all(self, col_name): collection = self.db[col_name] # 此处仅本地生成Collection对象,无网络请求 return collection.find({}) ...
问题2解答
- 你会得到两个Python层面互相独立的Collection实例,用
col is mongo.db[col_name]判断会返回False。 - 两个实例底层绑定同一个数据库连接池、同一个服务端集合,所有读写操作的最终效果完全一致,仅为内存中两个不同的代理对象,不会产生额外连接开销,也不会影响业务操作结果。
from pymongo.collection import Collection mongo = MyMongo() col = Collection(mongo.db, col_name) # 此处生成的col和mongo.db[col_name]是独立实例,底层指向同一集合
内容的提问来源于stack exchange,提问作者Wonseok the Great
相关产品推荐
相关产品推荐

