PyMongo中Cursor使用allow_disk_use报错的解决咨询
解决PyMongo中
allow_disk_use()调用报错的问题 我来帮你搞定这个问题,你遇到的报错根源是找错了allow_disk_use的正确调用方式——它不是Cursor对象的方法,而是查询初始化时需要传递的配置选项!
报错原因
你之前尝试的几种写法,都是在find()返回的Cursor对象上调用allow_disk_use(),但这个方法根本不存在于Cursor类中,自然会触发AttributeError。
allow_disk_use的作用是告诉MongoDB:当执行排序这类内存开销较大的操作时,可以使用磁盘临时文件来辅助完成。这个配置必须在创建查询Cursor的阶段就指定,无法对已生成的Cursor对象事后修改。
正确用法
针对你的场景,有两种可行的正确写法:
方法1:在find()中直接传入参数
这是最直观的方式,把allow_disk_use=True作为find()的参数传递:
from pymongo import MongoClient client = MongoClient() db = client['cvedb'] colCVE = db["cves"] # 直接在find中指定allow_disk_use选项 cve_ = colCVE.find(allow_disk_use=True).sort("Modified", -1)
方法2:使用with_options()生成新Cursor
如果已经创建了基础的Cursor对象,想要添加allow_disk_use选项,可以用with_options()方法(它会返回一个携带新配置的Cursor实例,原Cursor不会被修改):
from pymongo import MongoClient client = MongoClient() db = client['cvedb'] colCVE = db["cves"] # 先创建基础查询Cursor cve_base = colCVE.find().sort("Modified", -1) # 生成带有allow_disk_use选项的新Cursor cve_ = cve_base.with_options(allow_disk_use=True)
这两种写法都完全兼容你的MongoDB 4.4.1版本和最新版PyMongo,你可以根据自己的代码场景选择合适的方式。
内容的提问来源于stack exchange,提问作者hack3r-0m
相关产品推荐
相关产品推荐

