Changelog¶
版本3.11.0中的更改¶
版本3.11增加了对mongodb4.4的支持,并包含了许多错误修复。亮点包括:
支持 OCSP (在线证书状态协议)。
支持 PyOpenSSL 作为替代TLS实现。需要PyOpenSSL OCSP 支持。如果使用的Python版本早于2.7.9,那么在使用“tls”extra时也会安装它。
支持 MONGODB-AWS系统 认证机制。
支持
directConnection
URI选项和kwarg-toMongoClient
.支持在连接握手中进行推测性身份验证尝试,从而减少在MongoDB 4.4+上验证新连接所需的网络往返次数。
支持在多文档事务处理中创建集合
create_collection()
在MongoDB 4.4+上。添加了对
replace_one()
,update_one()
,update_many()
,find_one_and_replace()
,find_one_and_update()
,delete_one()
,delete_many()
和find_one_and_delete()
命令。添加了对
ReplaceOne
,UpdateOne
,UpdateMany
,DeleteOne
和DeleteMany
批量操作。为添加了支持
bson.binary.UuidRepresentation.UNSPECIFIED
和MongoClient(uuidRepresentation='unspecified')
从pymongo4.0开始,它将成为默认的UUID表示。看到了吗 处理UUID数据 有关详细信息。增加了
background
参数到pymongo.database.Database.validate_collection()
. 有关此参数的说明,请参阅MongoDB文档 validate command .增加了
allow_disk_use
参数到pymongo.collection.Collection.find()
.增加了
hedge
参数到PrimaryPreferred
,Secondary
,SecondaryPreferred
,Nearest
支持在mongodb4.4+中禁用(或显式启用)对冲读取。修复了更改流中的一个错误,该错误可能导致PyMongo在恢复启动时没有恢复令牌且其第一批不包含任何更改文档的流时丢失一些更改文档。
修正了使用gevent.超时操作超时可能导致死锁。
Deprecations:
贬低
oplog_replay
参数到pymongo.collection.Collection.find()
. 从mongodb4.4开始,服务器针对oplog集合优化查询,而不需要用户设置此标志。已弃用
pymongo.collection.Collection.reindex()
. 使用command()
运行reIndex
改为命令。已弃用
pymongo.mongo_client.MongoClient.fsync()
. 使用command()
运行fsync
改为命令。已弃用
pymongo.mongo_client.MongoClient.unlock()
. 使用command()
运行fsyncUnlock
而是命令。有关详细信息,请参阅文档。已弃用
pymongo.mongo_client.MongoClient.is_locked
. 使用command()
运行currentOp
而是命令。有关详细信息,请参阅文档。
不可避免的重大变化:
GridFSBucket
andGridFS
do not support multi-document transactions. Running a GridFS operation in a transaction now always raises the following error:InvalidOperation: GridFS does not support multi-document transactions
解决的问题¶
见 PyMongo 3.11.0 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.10.1中的更改¶
版本3.10.1修复了自3.10.0发布以来发现的以下问题:
修复记录到stderr的类型错误,该错误可能在服务器维护期间或
pymongo.mongo_client.MongoClient.close()
.
解决的问题¶
见 PyMongo 3.10.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.10.0中的更改¶
版本3.10包括一些改进和错误修复。亮点包括:
MongoDB 4.2支持客户端字段级加密。看到了吗 客户端字段级加密 举个例子。
支持Python3.8。
在MongoClient的后台线程中创建连接时,不要持有拓扑锁。此更改修复了应用程序操作将阻塞而后台线程确保所有服务器池都有minPoolSize连接的错误。
修复了在python2上将带有非ascii错误消息的PyMongoError强制为unicode时的unicodedecoderror错误错误。
修复了一个边缘情况错误,其中PyMongo在生成压缩的大容量写入命令时可能超过服务器的maxMessageSizeBytes。
解决的问题¶
见 PyMongo 3.10 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.9.0中的更改¶
版本3.9增加了对MongoDB 4.2的支持。亮点包括:
支持MongoDB 4.2分片事务。分片事务与副本集事务具有相同的API。看到了吗 交易 .
新方法
pymongo.client_session.ClientSession.with_transaction()
支持在会话中使用自动重试和最多一次语义来方便地运行事务。对客户端字段级加密的初始支持。请参见docstring
MongoClient
,AutoEncryptionOpts
和encryption
有关详细信息。 Note: Support for client side encryption is in beta. Backwards-breaking changes may be made before the final release.增加了
max_commit_time_ms
参数到start_transaction()
.实施 URI options specification 在
MongoClient()
建造师。因此,连接选项有许多变化:这个
tlsInsecure
已添加选项。这个
tls
已添加选项。年长的ssl
选项作为新的tls
选择权。wTimeout
已弃用,赞成wTimeoutMS
.wTimeoutMS
现在覆盖wTimeout
如果用户同时提供。j
已弃用,赞成journal
.journal
现在覆盖j
如果用户同时提供。ssl_cert_reqs
已弃用,赞成tlsAllowInvalidCertificates
. 而不是ssl.CERT_NONE
,ssl.CERT_OPTIONAL
和ssl.CERT_REQUIRED
,新选项需要布尔值-True
等于ssl.CERT_NONE
,同时False
等于ssl.CERT_REQUIRED
.ssl_match_hostname
已弃用,赞成tlsAllowInvalidHostnames
.ssl_ca_certs
已弃用,赞成tlsCAFile
.ssl_certfile
已弃用,赞成tlsCertificateKeyFile
.ssl_pem_passphrase
已弃用,赞成tlsCertificateKeyFilePassword
.waitQueueMultiple
已弃用,没有替换。这个选项对于设置排队上限是一个糟糕的解决方案,因为它不会影响驱动程序其他部分的排队。
这个
retryWrites
URI选项现在默认为True
. 由于可重试错误而失败的受支持的写入操作将自动重试一次,最多使用一次语义。支持可重试读取和
retryReads
默认启用的URI选项。见MongoClient
有关详细信息的文档。既然支持的操作可以自动、透明地重试,用户应该考虑调整任何自定义重试逻辑,以防止应用程序无意中重试太长时间。支持有线协议压缩的zstandard。
支持定期轮询DNS SRV记录以更新mongos代理列表,而无需更改客户端配置。
新方法
pymongo.database.Database.aggregate()
支持运行数据库级聚合。通过新的
ConnectionPoolListener
班级。见monitoring
举个例子。pymongo.collection.Collection.aggregate()
和pymongo.database.Database.aggregate()
现在支持$merge
管道阶段和使用读取首选项PRIMARY
如果$out
或$merge
使用管道级。支持在中指定管道或文档
update_one()
,update_many()
,find_one_and_update()
,UpdateOne()
和UpdateMany()
.Binary
现在支持实现缓冲协议的任何类似字节的类型。现在可以从
ChangeStream
光标使用resume_token
属性。当使用mongodb4.2+时,连接现在可以在主步骤中存活。在副本集选择期间,应用程序应该期望更少的套接字连接周转。
不可避免的重大变化:
使用MongoDB和MMAPv1存储引擎的应用程序现在必须通过连接字符串显式地禁用可重试的写入(例如。
MongoClient("mongodb://my.mongodb.cluster/db?retryWrites=false")
)或者MongoClient
构造函数的关键字参数(例如。MongoClient("mongodb://my.mongodb.cluster/db", retryWrites=False)
)为了避免撞上OperationFailure
写入操作期间出现异常。MMAPv1存储引擎已弃用,不支持现在默认打开的可重试写入。为了确保
connectTimeoutMS
当使用mongodb+srv://
连接字符串,可选的最低要求版本dnspython
依赖关系已升级到1.16.0。对于使用PyMongo的SRV支持和dnspython
大于1.16.0。
解决的问题¶
见 PyMongo 3.9 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.8.0中的更改¶
警告
PyMongo不再支持python2.6。RHEL6用户应该从 Red Hat Software Collections . CentOS 6用户应该从 SCL
警告
PyMongo不再支持早于3.5的PyPy3版本。用户必须升级到PyPy3.5+。
为了获得更好的性能并更好地遵循GridFS规范,
GridOut
现在使用一个游标来读取文件中的所有块。以前,文件中的每个块都是使用find_one()
.gridfs.grid_file.GridOut.read()
现在只在读取整个文件后检查额外的块。以前,这个方法会在每次调用时检查额外的块。current_op()
现在总是使用Database
的codec_options
当解码命令响应时。以前,codec_选项仅在MongoDB服务器版本<=3.0时使用。未删节的
get_default_database()
并添加了default
参数。TLS重新协商现在可以禁用。
自定义类型现在可以使用
TypeCodec
和TypeRegistry
原料药。有关详细信息,请参见 custom type example .尝试在分片集群上执行多文档事务现在会引发一个
ConfigurationError
.pymongo.cursor.Cursor.distinct()
和pymongo.cursor.Cursor.count()
现在发送光标的comment()
作为“comment”顶级命令选项而不是“$comment”。另外,请注意,“comment”必须是字符串。添加
filter
参数到list_collection_names()
.现在可以从
ChangeStream
使用新的pymongo.change_stream.ChangeStream.try_next()
方法。修复了基于maxWriteBatchSize或max消息大小拆分批处理写入命令时的引用泄漏错误。
不推荐运行
min()
和/或max()
但不要同时设置hint()
要使用的索引。find命令需要hint()
在MongoDB 4.2中使用最小/最大启动时。记录了对uuidrepresentationuri选项的支持,从pymongo2.7开始就支持这个选项。有效值为 pythonLegacy (违约), javaLegacy , csharpLegacy 和 standard . 新应用程序应考虑将此设置为 standard 跨语言兼容性。
RawBSONDocument
现在验证bson_bytes
传入表示单个bson文档。早期版本会错误地接受多个bson文档。迭代
RawBSONDocument
现在维护底层原始BSON文档的相同字段顺序。应用程序现在可以注册自定义服务器选择器。有关详细信息,请参阅 server selector example .
连接池现在实现了后进先出策略。
不可避免的重大变化:
为了遵循ObjectID规范版本0.2,ObjectID的3字节机器标识符和2字节进程id被每个进程生成的单个5字节随机值所代替。对于任何试图解释这些字节的应用程序来说,这是一个突破性的变化。
解决的问题¶
见 PyMongo 3.8 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.7.2中的更改¶
版本3.7.2修复了自3.7.1发布以来发现的一些问题。
修复了可重试写入中的一个错误,其中可能会发送上一个命令的“txnNumber”字段,从而导致错误的结果。
修复了运行mongodb3.6+时,一些insert、update或delete命令的内存泄漏问题。
修复了导致
pymongo.collection.Collection.ensure_index()
为每个数据库只缓存一个索引。更新了要使用的文档示例
pymongo.collection.Collection.count_documents()
而不是pymongo.collection.Collection.count()
和pymongo.cursor.Cursor.count()
.
解决的问题¶
见 PyMongo 3.7.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.7.1中的更改¶
版本3.7.1修复了自3.7.0发布以来发现的一些问题。
调用
authenticate()
多次使用相同的凭据会导致操作失败。当使用SCRAM-SHA-1仅使用MONGODB-CR凭据对用户进行身份验证时,身份验证失败。
在32位系统和AWS lambda上,在纯Python BSON解码器中解码日期时间时出现毫秒舍入问题。
解决的问题¶
见 PyMongo 3.7.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.7.0中的更改¶
版本3.7增加了对MongoDB 4.0的支持。亮点包括:
支持单副本集多文档ACID事务。看到了吗 交易 .
支持有线协议压缩。见
MongoClient()
有关详细信息的文档。支持Python3.7。
新的计数方法,
count_documents()
和estimated_document_count()
.count_documents()
与MongoDB 3.6+一起使用时,或与旧的独立或副本集部署一起使用时,始终是准确的。对于较旧的分片簇,与主读取首选项一起使用时总是准确的。它也可以在事务中使用,与现在已弃用的不同pymongo.collection.Collection.count()
和pymongo.cursor.Cursor.count()
方法。支持使用新的
pymongo.database.Database.watch()
方法。支持使用新的
pymongo.mongo_client.MongoClient.watch()
方法。支持使用新的
start_at_operation_time
的参数watch()
帮手。更好地支持在fips140-2环境中使用PyMongo。具体地说,当FIPS对象模块在OpenSSL中禁用MD5支持时,以下特性和更改允许PyMongo正常工作:
支持 SCRAM-SHA-256 认证机制。这个 GSSAPI , PLAIN 和 MONGODB-X509 机制也可以用来避免FIPS环境中的OpenSSL问题。
MD5校验和现在在GridFS中是可选的。见 disable_md5 选择权
GridFS
和GridFSBucket
.
这个
list_collection_names()
和collection_names()
方法在MongoDB支持时使用nameOnly选项。这个
pymongo.collection.Collection.watch()
方法现在返回CollectionChangeStream
类的子类ChangeStream
.为了提高性能,将缓存SCRAM客户机和服务器密钥,如下所示 RFC 5802 .
如果未指定,则 PLAIN 身份验证机制默认为$external。
wtimeoutMS再次作为URI选项得到支持。
当使用未确认的写入问题并连接到MongoDB服务器3.6版或更高版本时 bypass_document_validation 选项现在在以下写入帮助程序中受支持:
insert_one()
,replace_one()
,update_one()
,update_many()
.
Deprecations:
已弃用
pymongo.collection.Collection.count()
和pymongo.cursor.Cursor.count()
. 这两种方法使用 count command and may or may not be accurate ,取决于使用的选项和连接的MongoDB拓扑。使用count_documents()
相反。已弃用的快照选项
find()
和find_one()
. 该选项在MongoDB 3.6中被弃用,在MongoDB 4.0中被删除。已弃用的max_scan选项
find()
和find_one()
. MongoDB 4.0中不推荐使用该选项。使用 maxTimeMS 相反。已弃用
close_cursor()
. 使用close()
相反。已弃用
database_names()
. 使用list_database_names()
相反。已弃用
collection_names()
. 使用list_collection_names()
相反。已弃用
parallel_scan()
. MongoDB 4.2将删除parallelCollectionScan命令。
不可避免的重大变化:
失败并出现服务器错误代码10107、13435、13436、11600、11602、189、91(分别为NotMaster、NotMasterNoSlaveOk、notmasterrsecondary、interruptedtshutdown、InterruptedDueToReplStateChange、primaryStepdown、ShutdownInProgress)的命令现在总是会引发
NotMasterError
而不是OperationFailure
.parallel_scan()
不再使用隐式会话。显式会话仍然受支持。未确认的写入 (
w=0
)用一个明确的session
参数现在引发客户端错误。由于PyMongo不会等待未确认写入的响应,因此客户机串行运行的两个未确认写入操作可能会在服务器上同时执行。但是,服务器要求一个会话不能由多个操作同时使用。因此显式会话不能支持未确认的写入。未确认的写入没有session
参数仍然受支持。
解决的问题¶
见 PyMongo 3.7 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.6.1中的更改¶
版本3.6.1修复了自3.6.0发布以来报告的错误:
修复Pymongo3.5.0中的回归,该回归导致空闲套接字在
maxIdleTimeMS
已设置。空闲套接字现在在之后关闭maxIdleTimeMS
毫秒。pymongo.mongo_client.MongoClient.max_idle_time_ms
现在返回毫秒而不是秒。正确导入和使用 monotonic 安装时的单调时间库。
aggregate()
现在忽略batchSize
参数运行管道时$out
阶段。总是为新连接发送握手元数据。
解决的问题¶
见 PyMongo 3.6.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.6.0中的更改¶
版本3.6增加了对mongodb3.6的支持,删除了对cpython3.3的支持(仍然支持PyPy3),并删除了对2.6以前版本的MongoDB的支持。如果连接到MongoDB 2.4或更早版本的服务器,PyMongo现在抛出一个 ConfigurationError
.
亮点包括:
支持变更流。见
watch()
详细信息的方法。在中支持数组过滤器
update_one()
,update_many()
,find_one_and_update()
,UpdateOne()
和UpdateMany()
.新建会话API,请参阅
start_session()
.新方法
find_raw_batches()
和aggregate_raw_batches()
用于可解析BSON数据原始批处理的外部库。支持mongodb+srv://URIs。看到了吗
MongoClient
有关详细信息。索引管理助手 (
create_index()
,create_indexes()
,drop_index()
,drop_indexes()
,reindex()
)现在支持maxTimeMS。支持可重试写入和
retryWrites
URI选项。看到了吗MongoClient
有关详细信息。
Deprecations:
这个 useCursor 选择权
aggregate()
已弃用。只有在从MongoDB 2.4升级到MongoDB 2.6时,才需要该选项。不再支持MongoDB 2.4。这个
add_user()
和remove_user()
方法已弃用。请参阅docstrings方法以获取替代方法。
不可避免的重大变化:
从MongoDB 3.6开始,不推荐使用的方法
authenticate()
和logout()
现在使之前创建的所有游标失效。将一个用户的凭据传递给MongoClient
在构造时,或者将对多个数据库的访问权授予一个用户帐户,或者为每个用户使用不同的客户机对象。BSON二进制子类型4使用RFC-4122字节顺序解码,而不考虑UUID表示形式。这是使用UUID表示的应用程序的行为变化
bson.binary.JAVA_LEGACY
或bson.binary.CSHARP_LEGACY
解码BSON二进制子类型4。其他UUID表示,bson.binary.PYTHON_LEGACY
(违约)和bson.binary.STANDARD
BSON二进制子类型3的解码保持不变。
解决的问题¶
见 PyMongo 3.6 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.5.1中的更改¶
版本3.5.1修复了自3.5.0发布以来报告的错误:
周围工作套接字.getsockoptNetBSD问题。
pymongo.command_cursor.CommandCursor.close()
现在同步关闭光标,而不是推迟到后台线程。用sphinx1.6.x修复文档生成警告。
解决的问题¶
见 PyMongo 3.5.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.5中的更改¶
版本3.5实现了许多改进和错误修复:
亮点包括:
用户名和密码可以传递给
MongoClient
作为关键字参数。以前,传递它们的唯一方法是在URI中。提高了使用
RawBSONDocument
.提高了
database_names()
通过使用 nameOnly listDatabases的选项(如果可用)。提高了
bulk_write()
通过减少InsertOne
,DeleteOne
和DeleteMany
.增加了 collation 选择权
DeleteOne
,DeleteMany
,ReplaceOne
,UpdateOne
和UpdateMany
.实现了 MongoDB Extended JSON 规范。
Decimal128
现在在安装cdecimal时工作。PyMongo现在可以在更广泛的操作系统和CPU架构(包括s390x、ARM64和POWER8)上进行测试。
变更和反对:
find()
有新的选择 return_key , show_record_id , snapshot , hint , max_time_ms , max_scan , min , max 和 comment . 已弃用该选项 modifiers .已弃用
group()
. group命令在MongoDB 3.4中已被弃用,预期将在MongoDB 3.6中删除。应用程序应使用aggregate()
与 $group 而是管道阶段。已弃用
authenticate()
. 验证多个用户与mongodb3.6中的逻辑会话支持冲突。要作为多个用户进行身份验证,请创建MongoClient
.已弃用
eval()
. eval命令在MongoDB 3.0中已被弃用,将在将来的服务器版本中删除。已弃用
SystemJS
.已弃用
get_default_database()
. 应用程序应使用get_database()
没有 name 改为参数。已弃用MongoClient选项 socketKeepAlive. It now defaults to true and disabling it is not recommended, see does TCP keepalive time affect MongoDB Deployments?
已弃用
initialize_ordered_bulk_op()
,initialize_unordered_bulk_op()
和BulkOperationBuilder
. 使用bulk_write()
相反。已弃用
STRICT_JSON_OPTIONS
. 使用RELAXED_JSON_OPTIONS
或CANONICAL_JSON_OPTIONS
相反。如果是个习惯
CodecOptions
传递给RawBSONDocument
它的 document_class 必须是RawBSONDocument
.list_indexes()
当MongoDB>=3.0上不存在集合(或数据库)时,不再引发OperationFailure。相反,它返回一个空的CommandCursor
使所有MongoDB版本的行为一致。在Python 3中,
loads()
现在自动将子类型为0的JSON$binary解码为bytes
而不是Binary
. 见 Python 3常见问题解答 了解更多详细信息。loads()
现在提出TypeError
或ValueError
使用错误类型的值或任何额外的键解析JSON类型包装器时。pymongo.cursor.Cursor.close()
和pymongo.mongo_client.MongoClient.close()
现在同步杀死游标,而不是推迟到后台线程。parse_uri()
现在返回readPreference
MongoDB URI选项而不是已验证的读取首选项模式。
解决的问题¶
见 PyMongo 3.5 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.4中的更改¶
版本3.4实现了MongoDB 3.4中引入的新服务器功能,以及更多功能:
亮点包括:
完全支持MongoDB 3.4:
支持Unicode的字符串比较使用 排序规则 .
支持新的
Decimal128
BSON类型。一个新的maxStalenessSeconds读取首选项选项。
当连接到MONGODB>=3.4时,MONGODB-X509身份验证机制不再需要用户名。
parallel_scan()
支持maxTimeMS。WriteConcern
当连接到MongoDB 3.4+时,所有助手都会自动应用于写入数据库的命令。此更改会影响以下辅助对象:
改进了对记录服务器发现和监视事件的支持。看到了吗
monitoring
举个例子。支持匹配用于TLS证书验证的IP地址subjectAltName值。
TLS压缩现在尽可能显式禁用。
尽可能使用服务器名称指示(SNI)TLS扩展。
更好地控制JSON编码/解码
JSONOptions
.允许
Code
对象的作用域None
,表示没有范围。也允许使用空范围对代码对象进行编码(即。{{}}
)
警告
从Pymongo3.4开始, bson.code.Code.scope
可能返回 None
,默认范围为 None
而不是 {{}}
.
注解
pymongo3.4+在可能的情况下尝试创建不可继承的套接字(即,它在套接字文件描述符上设置close on exec标志)。支持仅限于POSIX操作系统(不包括Windows)的一个子集,并且通常不能在单个原子操作中设置标志。cpython3.4+实现 PEP 446 ,默认情况下创建所有不可继承的文件描述符。鼓励需要此行为的用户升级到cpython3.4+。
从3.4rc0开始,max staleness选项从 maxStalenessMS
到 maxStalenessSeconds
,其最小值已从两次更改 heartbeatFrequencyMS
设置为90秒,其默认值已从 None
或者0到-1。
解决的问题¶
见 PyMongo 3.4 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.3.1中的更改¶
版本3.3.1修复了对 RawBSONDocument
.
解决的问题¶
见 PyMongo 3.3.1 release notes in Jira 有关此版本中已解决问题的列表。
版本3.3中的更改¶
3.3版增加了以下主要新功能:
在big-endian系统上支持C扩展。
Windows上的Kerberos身份验证支持,使用 WinKerberos .
一个新的
ssl_clrfile
支持证书吊销列表的选项。一个新的
ssl_pem_passphrase
支持加密密钥文件的选项。支持发布服务器发现和监视事件。看到了吗
monitoring
有关详细信息。新建连接池选项
minPoolSize
和maxIdleTimeMS
.新的
heartbeatFrequencyMS
选项控制后台监视线程重新检查服务器的速率。默认值为每10秒一次。
警告
PyMongo3.3放弃了对MongoDB 2.4以上版本的支持。它还放弃了对python3.2的支持(pypy3仍然受支持)。
解决的问题¶
见 PyMongo 3.3 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.2.2中的更改¶
版本3.2.2修复了自3.2.1发布以来报告的一些问题,包括使用 connect 选项,并支持在使用mongodb3.2+时将查询的批处理大小设置为1。
解决的问题¶
见 PyMongo 3.2.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.2.1中的更改¶
版本3.2.1修复了自3.2发布以来报告的一些问题,包括在调用 inline_map_reduce()
方法与A TypeError
打电话时被提起 download_to_stream()
. 此版本还改进了有关BSON解码的错误消息传递。
解决的问题¶
见 PyMongo 3.2.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.2中的更改¶
版本3.2实现了MongoDB 3.2中引入的新服务器特性。
亮点包括:
全面支持MongoDB 3.2,包括:
支持
ReadConcern
WriteConcern
现在应用于find_one_and_replace()
,find_one_and_update()
和find_one_and_delete()
.支持新的 bypassDocumentValidation 写入辅助对象中的选项。
支持读写原始BSON
RawBSONDocument
注解
确定的 MongoClient
属性现在会阻塞,直到建立或引发连接 ServerSelectionTimeoutError
如果没有可用的服务器。看到了吗 MongoClient
有关详细信息。
解决的问题¶
见 PyMongo 3.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.1.1中的更改¶
版本3.1.1修复了自3.1发布以来报告的一些问题,包括对过大的命令文档的错误处理的回归,以及C扩展中的中断处理问题。
解决的问题¶
见 PyMongo 3.1.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.1中的更改¶
版本3.1实现了一些新特性并修复了自3.0.3发布以来报告的错误。
亮点包括:
指挥监控支持。看到了吗
monitoring
有关详细信息。的可配置错误处理
UnicodeDecodeError
. 见 unicode_decode_error_handler 选择权CodecOptions
.解码BSON datetime时可选的自动时区转换。见 tzinfo 选择权
CodecOptions
.实现
GridFSBucket
从新的GridFS规范。符合新的连接字符串规范。
减少了python2中的空闲CPU使用率。
内部类的变化¶
私人 PeriodicExecutor
课程不再需要 condition_class
选择权和私人 thread_util.Event
类被删除。
解决的问题¶
见 PyMongo 3.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.0.3中的更改¶
版本3.0.3修复了自3.0.2发布以来报告的问题,包括GSSAPI实现中的一个功能中断错误。
解决的问题¶
见 PyMongo 3.0.3 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.0.2中的更改¶
版本3.0.2修复了自3.0.1发布以来报告的问题,最重要的是一个bug,它可以将操作路由到使用时不处于主或辅助状态的副本集成员 PrimaryPreferred
或 Nearest
. 建议所有PyMongo3.0.x用户升级。
解决的问题¶
见 PyMongo 3.0.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.0.1中的更改¶
版本3.0.1修复了自3.0发布以来报告的问题,最重要的是GridFS.delete这可能会阻止文件块被实际删除。
解决的问题¶
见 PyMongo 3.0.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本3.0中的更改¶
PyMongo 3.0是对PyMongo的部分重写,带来了大量改进:
统一的客户端类。MongoClient是连接到独立mongod、副本集或分片集群的唯一客户机类。只需更改一个简单的URI就可以完成从独立的、副本集到分片集群的迁移。
MongoClient对MongoDB部署中的配置更改响应更快。所有连接的服务器都以非阻塞方式进行监视。响应速度慢或停机的服务器不再阻止服务器发现,减少了应用程序启动时间和响应新的或重新配置的服务器以及副本集故障转移的时间。
统一的CRUD API。所有官方的MongoDB驱动程序现在都实现了一个标准的crudapi,允许polyglot开发人员轻松地从一种语言迁移到另一种语言。
PyMongo不再依赖2to3来支持python3。
一个重写的纯Python BSON实现,使用pypy和cpython部署提高性能,而不支持C扩展。
更好地支持基于greenlet的异步框架,包括eventlet。
不可变的客户机、数据库和集合类,避免了客户机应用程序中的大量线程安全问题。
pymongo3.0带来了大量的API变化。在从pymongo2.x升级之前,请务必阅读下面列出的更改。
警告
PyMongo不再支持Python2.4、2.5或3.1。如果您必须在这些Python版本中使用PyMongo,那么PyMongo的2.x分支将在一段时间内得到最低限度的支持。
SONManipulator更改¶
这个 SONManipulator
API作为一种转换数据的技术有其局限性。相反,在将输出文档传递给PyMongo之前,用您自己的代码转换输出文档,并在从PyMongo接收到传入文档后转换这些文档,这将更加灵活和直接。
因此 add_son_manipulator()
方法已弃用。pymongo3的新crudapi可以做到这一点 not 将子操纵器应用于传递到的文档 bulk_write()
, insert_one()
, insert_many()
, update_one()
或 update_many()
. 儿子操纵者是 not 应用于由新方法返回的文档 find_one_and_delete()
, find_one_and_replace()
和 find_one_and_update()
.
SSL/TLS更改¶
什么时候? ssl 是 True
这个 ssl_cert_reqs 选项现在默认为 ssl.CERT_REQUIRED
如果没有提供。PyMongo将尝试加载OS提供的CA证书来验证服务器,引发 ConfigurationError
如果不能。
Gevent支架¶
在以前的版本中,PyMongo支持Gevent有两种模式:可以调用 gevent.monkey.patch_socket()
及格 use_greenlets=True
到 MongoClient
,或者你可以直接打电话 gevent.monkey.patch_all()
省略 use_greenlets
争论。
在Pymongo3.0中 use_greenlets
选项不见了。要在Gevent中使用PyMongo,只需调用 gevent.monkey.patch_all()
.
有关详细信息,请参阅 PyMongo's Gevent documentation .
MongoClient
变化¶
MongoClient
现在是独立服务器、mongos或副本集的唯一客户机类。它包含了被拆分为 MongoReplicaSetClient
:它可以连接到一个副本集,发现它的所有成员,并监视该副本集的降级、选举和重新配置。 MongoClient
现在还支持 ReadPreference
应用程序编程接口。
过时的类 MasterSlaveConnection
, Connection
和 ReplicaSetConnection
被移除。
这个 MongoClient
构造函数在连接到一个或多个服务器时不再阻塞,并且不再引发 ConnectionFailure
如果它们不可用,或者 ConfigurationError
如果用户的凭据错误。相反,构造函数立即返回并在后台线程上启动连接进程。这个 connect
选项用于控制这些线程是立即启动还是首次使用客户端。
因此 alive
方法已被删除,因为它不再提供有意义的信息;即使客户端断开连接,它也可能及时发现服务器以完成下一个操作。
在PyMongo 2.x中, MongoClient
接受了独立MongoDB服务器列表,并使用了它可以连接到的第一个服务器:
MongoClient(['host1.com:27017', 'host2.com:27017'])
不再支持多个standalone列表;如果列出多个服务器,它们必须是同一副本集的成员,或者是同一个分片集群中的mongose。
mongose列表的行为从“高可用性”更改为“负载平衡”。以前,客户端连接到列表中延迟最低的mongos,并使用它,直到出现网络错误提示它重新评估所有mongos的延迟并重新连接到其中一个。在PyMongo3中,客户端对所有Mongo3的网络延迟进行连续监控,并将操作平均分配给延迟最小的Mongo3。看到了吗 mongos负载平衡 更多信息。
客户端方法 start_request
, in_request
和 end_request
都被移除了 auto_start_request
选项。请求的目的是使读写一致性更有可能与 w=0
写下关注点。此外,请求中的线程将同一成员用于副本集中的所有辅助读取。为了确保pymongo3.0中的读写一致性,不要用重写默认的写关注点 w=0
,并且不重写默认值 read preference 初级的。
支持 slaveOk
(或) slave_okay
) safe
和 network_timeout
选项已删除。使用 SECONDARY_PREFERRED
而不是奴隶。接受默认的写入问题,确认写入,而不是设置safe=True。使用socketTimeoutMS代替networku timeout(请注意,networku timeout以秒为单位,其中as socketTimeoutMS是毫秒)。
这个 max_pool_size
选项已删除。它被替换为 maxPoolSize
MongoDB URI选项。 maxPoolSize
现在是PyMongo中支持的URI选项,可以作为关键字参数传递。
这个 copy_database
方法被删除,请参见 copy_database examples 以备选择。
这个 disconnect
方法已删除。使用 close()
相反。
这个 get_document_class
方法已删除。使用 codec_options
相反。
这个 get_lasterror_options
, set_lasterror_options
和 unset_lasterror_options
方法被删除。写入问题选项可以传递给 MongoClient
作为关键字参数或MongoDB URI选项。
这个 get_database()
方法用于获取数据库实例,该实例的选项配置与MongoClient的不同。
已添加以下只读属性:
以下属性现在是只读的:
已删除以下属性:
document_class
(使用)codec_options
相反)host
(使用)address
相反)min_wire_version
max_wire_version
port
(使用)address
相反)safe
(使用)write_concern
相反)slave_okay
(使用)read_preference
相反)tag_sets
(使用)read_preference
相反)tz_aware
(使用)codec_options
相反)
已重命名以下属性:
secondary_acceptable_latency_ms
现在是local_threshold_ms
现在是只读的。
光标管理更改¶
CursorManager
和 set_cursor_manager()
不再被弃用。如果你的子类 CursorManager
你的实现 close()
现在必须接受第二个参数, address . 这个 BatchCursorManager
类被删除。
第二个参数 close_cursor()
重命名自 _conn_id
到 address
. kill_cursors()
现在接受一个 address 参数。
Database
变化¶
这个 connection
属性已重命名为 client
.
已添加以下只读属性:
以下属性现在是只读的:
使用 get_database()
获取一个数据库实例,该实例的选项配置与MongoClient的不同。
已删除以下属性:
safe
secondary_acceptable_latency_ms
slave_okay
tag_sets
增加了以下方法:
更改了以下方法:
command()
. 支持 as_class , uuid_subtype , tag_sets 和 secondary_acceptable_latency_ms 已被删除。您可以改为传递CodecOptions
作为 codec_options 以及从中读取首选项类的实例read_preferences
作为 read_preference . 这个 fields 和 compile_re 选项也会被删除。这个 fields 选项没有记录,从来没有真正起作用。正则表达式总是被解码为Regex
.
以下方法已被弃用:
已删除以下方法:
这个 get_lasterror_options
, set_lasterror_options
和 unset_lasterror_options
方法已被删除。使用 WriteConcern
具有 get_database()
相反。
Collection
变化¶
已添加以下只读属性:
以下属性现在是只读的:
使用 get_collection()
或 with_options()
获取一个集合实例,其选项配置与数据库的不同。
已删除以下属性:
safe
secondary_acceptable_latency_ms
slave_okay
tag_sets
增加了以下方法:
以下方法已更改:
aggregate()
现在 总是 返回的实例CommandCursor
. 有关所有选项,请参阅文档。count()
现在可以选择接受一个filter参数,以及count命令支持的其他选项。distinct()
现在可以选择使用过滤器参数。create_index()
不再缓存索引,因此 cache_for 参数已删除。它也不再支持 bucket_size 和 drop_dups 用于别名 bucketSize 和 dropDups .
不推荐使用以下方法:
已删除以下方法:
这个 get_lasterror_options
, set_lasterror_options
和 unset_lasterror_options
方法已被删除。使用 WriteConcern
具有 with_options()
相反。
改变到 find()
和 find_one()
¶
以下“查找/查找”选项已重命名:
只有当您将这些重命名作为关键字参数(如find(fields))传递时,这些重命名才会影响代码= ['字段名'] ). 如果只传递位置参数,则这些更改对于应用程序来说并不重要。
规格->过滤器
字段->投影
部分->允许部分结果
添加了以下查找/查找选项:
光标类型(请参见
CursorType
价值观)oplog_replay
修饰语
已删除以下“查找/查找”选项:
网络超时(使用
max_time_ms()
相反)slave_okay(使用
read_preferences
和with_options()
相反)read_首选项(使用
with_options()
相反)标记集(使用
read_preferences
和with_options()
相反)二级可接受的延迟(使用 localThresholdMS 改为URI选项)
最大扫描(使用新的 modifiers 选项)
快照(使用新的 modifiers 选项)
可裁剪(使用新的 cursor_type 选项)
等待数据(使用新的 cursor_type 选项)
排气(使用新的 cursor_type 选项)
as_类(使用
with_options()
具有CodecOptions
相反)编译(BSON正则表达式总是被解码为
Regex
)
不推荐使用以下“查找/查找”选项:
操纵
以下重命名需要特殊处理。
超时->无光标超时-的默认值 timeout 是真的。的默认值 no_cursor_timeout 是假的。如果你之前把假传给 timeout 你必须通过 True 对于 no_cursor_timeout 保持以前的行为。
gridfs
变化¶
从Pymongo1.6开始,方法 open
和 close
属于 GridFS
提出了一个 UnsupportedAPI
例外,整个 GridFile
班级。不支持的方法、类和异常都将被删除。
bson
变化¶
这个 compile_re option is removed from all methods that accepted it in bson
and json_util
. Additionally, it is removed from find()
, find_one()
, aggregate()
, command()
, and so on. PyMongo now always represents BSON regular expressions as Regex
objects. This prevents errors for incompatible patterns, see PYTHON-500 . 使用 try_compile()
尝试从BSON正则表达式转换为Python正则表达式对象。
PyMongo现在将int64 BSON类型解码为 Int64
,一个围绕long(在python2.x中)或int(在python3.x中)的简单包装器。这使得BSON int64能够在不丢失python3中的类型信息的情况下进行往返。注意,如果您存储一个python long(或一个大于4个字节的python int),它将从PyMongo返回为 Int64
.
这个 as_class , tz_aware 和 uuid_subtype 选项将从所有BSON编码和解码方法中删除。使用 CodecOptions
配置这些选项。受影响的API包括:
对于直接使用BSON API并更改任何命名参数默认值的应用程序来说,这是一个突破性的变化。对于使用这些选项的默认值的应用程序,不需要进行任何更改。行为保持不变。
解决的问题¶
见 PyMongo 3.0 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.9.5中的更改¶
版本2.9.5围绕Python3.6中的ssl模块不推荐使用,以及预期将来的ssl模块不推荐使用。它还修复了自2.9.4发布以来发现的错误。
使用ssl.ssl上下文以及ssl.PROTOCOLu TLSu客户端如果有的话。
修正了当解释器使用-std=c99构建时的一个C扩展构建问题
修正了MinGW32的各种构建问题。
修复了中的写入问题错误
add_user()
和remove_user()
连接到MongoDB 3.2时+修复了与gevent、MongoDB和CI测试环境中的更改相关的各种测试失败。
解决的问题¶
见 PyMongo 2.9.5 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.9.4中的更改¶
版本2.9.4修复了自2.9.3发布以来报告的问题。
固定的 __repr__ 对于的封闭实例
MongoClient
.固定的
MongoReplicaSetClient
uuidRepresentation的处理。修复了使用python3.x构建和测试文档的问题。
的新文档 TLS/SSL和PyMongo 和 在MongoDB Atlas中使用PyMongo .
解决的问题¶
见 PyMongo 2.9.4 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.9.3中的更改¶
版本2.9.3修复了自2.9.2发布以来报告的一些问题,包括 ensure_index()
, drop_index()
和 drop_indexes()
.
解决的问题¶
见 PyMongo 2.9.3 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.9.2中的更改¶
版本2.9.2恢复了PyMongo2.8中中断的Python3.1支持。它改进了解码BSON时的错误消息,并修复了一些其他问题,包括 aggregate()
忽略 codec_options
和 command()
提出多余的 DeprecationWarning .
解决的问题¶
见 PyMongo 2.9.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.9.1中的更改¶
版本2.9.1修复了C扩展中的两个中断处理问题,并为MongoDB 3.2中的行为更改调整了一个测试用例。
解决的问题¶
见 PyMongo 2.9.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.9中的更改¶
版本2.9提供了到PyMongo 3.x的升级路径。PyMongo 3.0的大部分API更改都是以向后兼容的方式进行后端口移植的,这样就可以针对PyMongo>=2.9而不是PyMongo 2.x或PyMongo 3.x编写应用程序。请参阅 Pymongo3迁移指南 详细的例子。
注解
对于PyMongo3.0中删除的特性,此版本中有许多新的不推荐使用的特性。
MongoClient
:host
port
use_greenlets
document_class
tz_aware
secondary_acceptable_latency_ms
tag_sets
uuid_subtype
disconnect()
alive()
MongoReplicaSetClient
:use_greenlets
document_class
tz_aware
secondary_acceptable_latency_ms
tag_sets
uuid_subtype
alive()
Database
:secondary_acceptable_latency_ms
tag_sets
uuid_subtype
Collection
:secondary_acceptable_latency_ms
tag_sets
uuid_subtype
警告
在以前版本的PyMongo中,更改 document_class
已更改的所有现有实例的行为 Collection
::
>>> coll = client.test.test
>>> coll.find_one()
{u'_id': ObjectId('5579dc7cfba5220cc14d9a18')}
>>> from bson.son import SON
>>> client.document_class = SON
>>> coll.find_one()
SON([(u'_id', ObjectId('5579dc7cfba5220cc14d9a18'))])
document_类设置现在可以在客户端、数据库、集合和每个操作级别进行配置。这需要打破现有的行为。要以向前兼容的方式更改每个操作的文档类,请使用 with_options()
::
>>> coll.find_one()
{u'_id': ObjectId('5579dc7cfba5220cc14d9a18')}
>>> from bson.codec_options import CodecOptions
>>> coll.with_options(CodecOptions(SON)).find_one()
SON([(u'_id', ObjectId('5579dc7cfba5220cc14d9a18'))])
解决的问题¶
见 PyMongo 2.9 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.8.1中的更改¶
版本2.8.1修复了自pymongo2.8发布以来报告的许多问题。它是PyMongo2.x的所有用户的推荐升级。
解决的问题¶
见 PyMongo 2.8.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本变更¶
版本2.8是一个主要的版本,它提供了对MongoDB 3.0的完全支持,并修复了许多错误。
特别感谢Don Mitchell、Ximing、Can Zhang、Sergey Azovskov和Heewa Barfchin为本次发布所做的贡献。
亮点包括:
支持SCRAM-SHA-1身份验证机制(MongoDB 3.0中的新功能)。
JSON解码器支持新的$numberLong和$undefined类型。
JSON解码器支持将$date类型作为ISO-8601字符串。
支持将索引名称传递给
hint()
.连接池的新socketKeepAlive选项。
新的基于发生器的BSON解码函数,
decode_iter()
和decode_file_iter()
.支持wiredtiger等替代存储引擎的内部更改。
注解
对于PyMongo3.0中将要删除的特性,此版本中有许多不推荐使用的特性。其中包括:
start_request()
in_request()
end_request()
copy_database()
MasterSlaveConnection
The JSON format for Timestamp
has changed from
'{"t": <int>, "i": <int>}' to '{"$timestamp": {"t": <int>, "i": <int>}}'.
This new format will be decoded to an instance of
Timestamp
. The old format will continue to be
decoded to a python dict as before. Encoding to the old format is no
longer supported as it was never correct and loses type information.
解决的问题¶
见 PyMongo 2.8 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.7.2中的更改¶
版本2.7.2包含了针对MongoDB 2.6之前版本的bulk API中upsert报告的修复,这是如何应用子操纵器的回归 insert()
,一些模糊的连接池信号量泄漏,以及其他一些小问题。有关详细信息,请参阅已解决问题的列表。
解决的问题¶
见 PyMongo 2.7.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.7.1中的更改¶
版本2.7.1修复了自2.7发布以来报告的许多问题,最重要的是修复了通过2.4.0以上的mongos版本创建索引和操纵用户的问题。
解决的问题¶
见 PyMongo 2.7.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.7中的更改¶
PyMongo2.7是一个主要的版本,有大量的新特性和错误修复。亮点包括:
完全支持MongoDB 2.6。
一个新的 bulk write operations API .
使用支持服务器端查询超时
max_time_ms()
.写作支持
aggregate()
输出到集合。一个新的
parallel_scan()
帮手。OperationFailure
它的子类现在包括一个details
属性,其中包含来自服务器的完整错误详细信息。一个新的网格
find()
返回GridOutCursor
.大大提高了 support for mod_wsgi 当使用PyMongo的C扩展时。阅读 Jesse's blog post 有关详细信息。
改进了对ARM little-endian的C扩展支持。
正在中断更改¶
版本2.7取消了对运行MongoDB 1.6.2以前版本的副本集的支持。
解决的问题¶
见 PyMongo 2.7 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.6.3中的更改¶
版本2.6.3修复了自2.6.2发布以来报告的问题,最重要的是在连接到服务器失败时信号量泄漏。
解决的问题¶
见 PyMongo 2.6.3 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.6.2中的更改¶
版本2.6.2修复了 TypeError
python3中使用max_pool_size=None时出现问题。
解决的问题¶
见 PyMongo 2.6.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.6中的更改¶
版本2.6包含了一些经常要求的改进,并增加了对一些早期MongoDB 2.6特性的支持。
特别感谢justinpatrin在这个版本中对连接池所做的工作。
重要的新功能:
这个
max_pool_size
选择权MongoClient
和MongoReplicaSetClient
现在实际限制池将同时打开的套接字数。一旦游泳池到达max_pool_size
操作将阻止等待套接字可用。如果waitQueueTimeoutMS
设置时,阻止等待套接字的操作将引发ConnectionFailure
暂停之后。默认情况下waitQueueTimeoutMS
未设置。看到了吗 连接池在PyMongo中是如何工作的? 更多信息。这个
insert()
方法根据max_message_size
支持排气光标标志。看到了吗
find()
详情和注意事项。支持普通和MONGODB-X509身份验证机制。看到了吗 the authentication docs 更多信息。
支持聚合输出作为
Cursor
. 见aggregate()
有关详细信息。
警告
2.6中的显著行为改变。以前, max_pool_size 将只限制池将保留的空闲套接字,而不限制打开的套接字的数量。默认值也发生了变化,从10改为100。如果为传递值 max_pool_size
确保它足够大以承受预期的负载。(插座只在需要时打开,因此没有成本 max_pool_size
比必要的大。如果应用程序接受默认值,则继续这样做。
见 连接池在PyMongo中是如何工作的? 更多信息。
解决的问题¶
见 PyMongo 2.6 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.5.1中的更改¶
版本2.5.1是一个小版本,它修复了2.5版本之后发现的问题。最重要的是,这个版本解决了复制集监视中的一些竞争条件。
解决的问题¶
见 PyMongo 2.5.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.5中的更改¶
版本2.5包含了支持MongoDB 2.4中新功能的更改。
重要的新功能:
支持主机名匹配的SSL证书验证。
支持委托和基于角色的身份验证。
新的GEOSPHERE(2dsphere)和散列索引常量。
注解
authenticate()
现在引发一个子类 PyMongoError
如果身份验证因无效凭据或配置问题而失败。
解决的问题¶
见 PyMongo 2.5 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.4.2中的更改¶
版本2.4.2是一个小版本,它修复了在2.4.1发布之后发现的问题。最重要的是,PyMongo将不再为非主或辅助状态的读取操作选择副本集成员。
解决的问题¶
见 PyMongo 2.4.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.4.1中的更改¶
版本2.4.1是一个小版本,它修复了2.4版本之后发现的问题。最重要的是,这个版本使用 aggregate()
,可能还有其他命令。
解决的问题¶
见 PyMongo 2.4.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.4中的更改¶
版本2.4包括一些重要的新特性和大量的错误修复。
重要的新功能:
新的
MongoClient
和MongoReplicaSetClient
类-默认情况下,这些连接类执行已确认的写入操作(以前称为“安全”写入)。Connection
和ReplicaSetConnection
已弃用,但仍支持旧的默认fire-and-forget行为。一个新的写关注点API实现为
write_concern
连接上的属性,Database
或Collection
类。MongoClient
(和Connection
)现在支持Unix域套接字。这个
set_profiling_level()
方法现在支持 slow_ms 选择权。复制集监视任务(由使用
MongoReplicaSetClient
和ReplicaSetConnection
)又是一个守护线程,这意味着您不必调用close()
在退出python交互式shell之前。
警告
的构造函数 MongoClient
, MongoReplicaSetClient
, Connection
和 ReplicaSetConnection
现在提高 ConnectionFailure
而不是它的子类 AutoReconnect
如果服务器不可用。希望捕获的应用程序 AutoReconnect
现在应该明白了 ConnectionFailure
创建新连接时。
解决的问题¶
见 PyMongo 2.4 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.3中的更改¶
版本2.3增加了对MongoDB 2.2中新特性和行为更改的支持。
重要的新功能:
支持扩展的读取首选项,包括将读取定向到标记的服务器-请参阅 辅助读取 更多信息。
支持mongos故障转移。
一个新的
aggregate()
方法来支持MongoDB的新 aggregation framework .在编码和解码uuid时支持传统Java和C字节顺序。
支持直接连接到仲裁器。
警告
从MongoDB 2.2开始,getLastError命令要求在服务器 authentication features 已启用。需要对PyMongo进行更改以支持这种行为更改。身份验证用户必须升级到pymongo2.3(或更新版本)才能使“安全”写入操作正常工作。
解决的问题¶
见 PyMongo 2.3 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.2.1中的更改¶
版本2.2.1是一个小版本,它修复了2.2版本之后发现的问题。最重要的是,这个版本修复了与modwsgi2.x的不兼容,这可能导致连接泄漏。强烈建议moduwsgi2.x用户从pymongo2.2升级。
解决的问题¶
见 PyMongo 2.2.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.2中的更改¶
版本2.2添加了一些更常见的功能,并修复了一些bug。
特别感谢Alex Grönholm为python3支持和维护原始pymongo3端口所做的贡献。Christoph Simon、Wouter Bolsterlee、Mike O'Brien和Chris Tompkinson也参与了本次发布。
重要的新功能:
对Python3的支持-请参见 Python 3常见问题解答 更多信息。
对Gevent的支持-请参阅 Gevent 更多信息。
改进了连接池。看到了吗 PYTHON-287 .
警告
PyMongo1.9或更早版本中不推荐使用的许多方法和方法参数在此版本中已被删除。更改的完整列表可在以下JIRA罚单中找到:
https://jira.mongodb.org/browse/PYTHON-305
pymongo1.9中不推荐使用的pymongo包中的BSON模块别名在这个版本中也被删除了。详见以下JIRA门票:
https://jira.mongodb.org/browse/PYTHON-304
此清理的结果是,使用此版本可能需要一些小的代码更改。
解决的问题¶
见 PyMongo 2.2 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.1.1中的更改¶
版本2.1.1是一个小版本,它修复了2.1版本之后发现的一些问题。你现在可以使用 ReplicaSetConnection
在辅助数据库上运行内联map reduce命令。看到了吗 inline_map_reduce()
有关详细信息。
特别感谢塞缪尔·克莱和罗斯·劳利为本次发行所做的贡献。
解决的问题¶
见 PyMongo 2.1.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.1中的更改¶
版本2.1增加了一些经常被要求的特性,包括一轮常见的错误修复和改进。
特别感谢Alexey Borzenkov、Dan Crosta、Kostya Rybnikov、Flavio Percoco Premoli、Jonas Haag和Jesse Davis为本次发布所做的贡献。
重要的新功能:
复制集连接-
ReplicaSetConnection
可用于将读取分发到副本集中的辅助副本。它支持自动故障转移处理,并定期检查副本集的状态,以处理诸如主降级或因备份操作而删除辅助副本之类的问题。读取首选项通过定义ReadPreference
.PyMongo支持uuid的新BSON二进制子类型4。可以通过设置要使用的默认子类型
uuid_subtype
当前默认值仍然存在OLD_UUID_SUBTYPE
但将改为UUID_SUBTYPE
在未来的版本中。getLastError选项'w'可以设置为一个字符串,这样就允许在更新版本的MongoDB中使用类似“mostive”的选项。
增加了对MongoDB URI选项socketTimeoutMS和connectTimeoutMS的支持。
添加了对ContinueOnError插入标志的支持。
添加了基本的SSL支持。
添加了对Jython的基本支持。
辅助项可用于
count()
,distinct()
,group()
,和查询GridFS
.向添加了document_class和tz_aware选项
MasterSlaveConnection
解决的问题¶
见 PyMongo 2.1 release notes in JIRA 有关此版本中已解决问题的列表。
版本2.0.1中的更改¶
版本2.0.1修复了 GridIn
写预分块字符串时。感谢Alexey Borzenkov报告此问题并提交补丁。
解决的问题¶
PYTHON-271: GridFS中的回归会导致严重的数据丢失。
版本2.0中的更改¶
版本2.0添加了大量功能并修复了许多问题。
特别感谢James Murty、Abhay Vardhan、David Pisoni、Ryan Smith Roberts、Andrew Pendleton、Mher Movssiyan、Reed O'Brien、Michael Schurter、Josip Delic和Jonas Haag为本次发布所做的贡献。
重要的新功能:
PyMongo现在执行每个套接字的自动数据库身份验证。您不再需要为每个新线程或在复制集故障转移后重新进行身份验证。身份验证凭据由驱动程序缓存,直到应用程序调用
logout()
.slave_okay可以在连接、数据库、集合或查询级别独立设置。每个级别将继承上一级别的slave_ok设置,并且每个级别都可以覆盖上一级别的设置。
safe和getLastError选项(例如w、wtimeout等)可以在连接、数据库、集合或查询级别独立设置。每个级别将继承上一级别的设置,并且每个级别都可以覆盖上一级别的设置。
PyMongo现在支持 await_data 和 partial 光标标志。如果 await_data 标志设置在 tailable 游标服务器将阻塞一段时间,等待更多数据返回。这个 partial 标志告诉mongos,如果不是所有的碎片都可用,则返回查询的部分数据。
map_reduce()
将接受 dict 或者是SON
作为 out 参数。URI解析器已经被移到它自己的模块中,可以由应用程序代码直接使用。
AutoReconnect异常现在提供有关实际发生的错误的信息,而不是一般的失败消息。
添加了许多新的helper方法,其中包括设置和取消设置光标标志、重新索引集合、fsync和锁定服务器以及获取服务器当前操作的选项。
API更改:
如果只有一个主机:端口对是指定的
Connection
将只直接连接到该主机。请注意 slave_okay 必须是 True 以便从辅助服务器进行查询。如果不止一个主机:端口对指定或 replicaset 选项被使用,PyMongo将处理指定的主机:端口对(s) 作为种子列表并使用复制集行为进行连接。
警告
的默认子类型 Binary
已从更改 OLD_BINARY_SUBTYPE
(2) 到 BINARY_SUBTYPE
(0)。
解决的问题¶
见 PyMongo 2.0 release notes in JIRA 有关此版本中已解决问题的列表。
版本1.11中的更改¶
版本1.11增加了一些新特性并修复了一些错误。
新功能:
基本IPv6支持:pymongo更喜欢IPv4,但将尝试IPv6。也可以在 host 参数或MongoDB URI,前提是它包含在' [“和”] '.
最大池大小选项:以前pymongo的硬编码池大小为10个连接。通过此更改,您可以指定不同的池大小作为
Connection
(max_pool_size=<integer>)或在MongoDB URI中(maxPoolSize=<integer>)。在GridFS中按元数据查找:可以知道将查询字段指定为
get_version()
和get_last_version()
.每查询slave_okay选项:slave_okay=True现在是的有效关键字参数
find()
和find_one()
.
API更改:
validate_collection()
现在返回dict而不是字符串。此更改是处理服务器上的API更改所必需的。此方法现在还采用可选的 scandata 和 full 参数。有关详细信息,请参阅文档。
警告
这个 pool_size , auto_start_request 和 timeout 的参数 Connection
已在此版本中完全删除。它们在pymongo-1.4中被弃用,此后没有任何效果。请确保您的代码当前在创建连接实例时没有传递这些参数。
解决的问题¶
PYTHON-241: 支持光标级slaveok设置。
PYTHON-240: 有时副本集在查询后可能会永久性地失败。
PYTHON-238: 几百万次请求后出错
PYTHON-237: 基本IPv6支持。
PYTHON-236: 用于指定连接中池大小的还原选项。
PYTHON-212: pymongo在配置过期后无法恢复
PYTHON-138: GridFS的查找方法
版本1.10.1中的更改¶
版本1.10.1主要是一个错误修复版本。它修复了版本1.10中的一个回归,该版本打破了objectid的酸洗。其他一些错误也被修复了。
有两种行为变化需要注意:
如果读从设备启动
AutoReconnect
MasterSlaveConnection
现在将在每个从属服务器上重试查询,直到查询成功或所有从属服务器都已引发AutoReconnect
. 任何其他例外情况都将立即提出。奴隶被审判的顺序是随机的。以前,读取的数据将被发送到一个随机选择的从属服务器,并且AutoReconnect
在连接失败的情况下立即引发。A Python long is now always BSON encoded as an int64. Previously the encoding was based only on the value of the field and a long with a value less than 2147483648 or greater than -2147483649 would always be BSON encoded as an int32.
解决的问题¶
PYTHON-234: 修复设置.py生成时引发任何异常
PYTHON-233: 添加要在windows上使用扩展进行生成和测试的信息
PYTHON-232: 散列DBRef实例时的回溯
PYTHON-231: 在pickle DBRef实例时进行回溯
PYTHON-230: Pickled objectid在pymongo 1.9和1.10之间不兼容
PYTHON-228: 不能腌制bson.ObjectId
PYTHON-227: 在上调用find()时进行回溯系统.js
PYTHON-216: MasterSlaveConnection缺少disconnect()方法
PYTHON-186: 存储整数时,根据值而不是类型选择类型
PYTHON-173: as_class选项不是由提出的光标.克隆
PYTHON-113: 主连接中的Redunducy
版本1.10中的更改¶
版本1.10包含了支持MongoDB 1.8.x中新功能的更改。亮点包括一个改进的map/reduce API,包括一个内嵌的map/reduce助手方法,一个新的find_和_modify helper,以及查询服务器以获得它支持的最大BSON文档大小的能力。
补充
find_and_modify()
.补充
inline_map_reduce()
.改变
map_reduce()
.
警告
大于1.7.4的MongoDB版本不再为map/reduce结果生成临时集合。必须提供输出集合名称,并且输出将用相同名称替换任何现有的输出集合。 map_reduce()
现在需要 out 参数。
解决的问题¶
PYTHON-225:
ObjectId
类定义应使用 __slots__.PYTHON-223:文档修复。
PYTHON-220:文档修复。
PYTHON键入错误
find_and_modify()
PYTHON-213:查询服务器以获取最大BSON文档大小。
PYTHON-208:修复
Connection
__repr__.PYTHON-207:对Map/Reduce API的更改。
PYTHON-205:接受URI中的slaveOk以匹配URI文档。
PYTHON-203:当slave_okay=True并且我们只指定一个主机时,不会自动检测其他集合成员。
PYTHON-194:抱怨文档太大时显示大小。
PYTHON-184:升起
DuplicateKeyError
对于capped集合中的重复键。PYTHON-178:在尝试对递归数据结构进行编码时不要进行segfault。
PYTHON-177:当使用损坏的迭代器解码dicts时不要segfault。
PYTHON-172:修复错误。
PYTHON-170:添加
find_and_modify()
.PYTHON-169:支持DBRef的deepcopy。
PYTHON-167:PYTHON-166的副本。
PYTHON-166:修复了并发问题。
PYTHON-158:将代码和错误字符串添加到 db assertion 信息。
版本1.9中的更改¶
版本1.9向PyMongo发行版添加了一个新的包, bson
. bson
包含所有 BSON 编码和解码逻辑,以及以前在 pymongo
包裹。以下模块已重命名:
pymongo.bson
->bson
pymongo._cbson
->bson._cbson
andpymongo._cmessage
pymongo.binary
->bson.binary
pymongo.code
->bson.code
pymongo.dbref
->bson.dbref
pymongo.json_util
->bson.json_util
pymongo.max_key
->bson.max_key
pymongo.min_key
->bson.min_key
pymongo.objectid
->bson.objectid
pymongo.son
->bson.son
pymongo.timestamp
->bson.timestamp
pymongo.tz_util
->bson.tz_util
此外,以下异常类已重命名:
pymongo.errors.InvalidBSON
->bson.errors.InvalidBSON
pymongo.errors.InvalidStringData
->bson.errors.InvalidStringData
pymongo.errors.InvalidDocument
->bson.errors.InvalidDocument
pymongo.errors.InvalidId
->bson.errors.InvalidId
以上异常现在继承自 bson.errors.BSONError
而不是 pymongo.errors.PyMongoError
.
注解
上面所有重命名的模块和异常都使用旧名称创建别名,因此这些更改不应破坏现有代码。旧名称最终将被弃用,然后被删除,因此用户现在应该开始向新名称迁移。
警告
对上述异常层次结构的更改可能正在中断。如果你的代码有问题 PyMongoError
,则 bson
不会被抓,即使他们以前也会被抓。在升级之前,建议用户检查是否存在类似情况。
C扩展现在与Ruby驱动程序共享buffer.C/h
bson
不再加薪InvalidName
,所有引用都已替换为InvalidDocument
.更名
bson._to_dicts()
到decode_all()
.补充
batch_size()
.允许在
GridIn
实例已关闭。从GridFS读取的性能改进。
具有相同开始和停止的特殊大小写切片以返回空光标。
允许写入
unicode
如果encoding
已为文件指定属性。变量范围
Code
现在可以指定为关键字参数。补充
readline()
到GridOut
.如果
Connection
已经闲置了一段时间了。补充 file_document 参数
GridOut()
允许从现有文件文档初始化。提升
TimeoutError
即使getLastError
命令是手动运行的,而不是通过“安全”模式。补充
uuid
支持json_util
.
版本变更¶
修正了C扩展中可能导致安全模式操作报告失败的错误 (
SystemError
)即使没有发生。增加了一个
__ne__()
我们定义的任何类的实现__eq__()
.
版本1.8中的更改¶
版本1.8增加了对连接到副本集的支持,为 w 和 wtimeout ,并解码为时区感知的日期时间。
修正了解码a时C扩展中的一个引用泄漏
DBRef
.为添加了支持 w , wtimeout 和 fsync (以及任何其他选项 getLastError )“安全模式”操作。
补充
nodes
财产。添加了10个套接字的最大池大小。
增加了对副本集的支持。
DEPRECATED
from_uri()
和paired()
,两者都被中的扩展功能所取代Connection()
.补充
drop()
帮手。当
Connection
是首次创建的。添加了对将日期时间解码为可感知(UTC)的支持—强烈建议通过设置 tz_aware 参数到
Connection()
到True
.补充 network_timeout 个人通话选项
find()
和find_one()
.补充
exists()
检查GridFS中是否存在文件。在中添加了对其他密钥的支持
DBRef
实例。补充
code
属性到OperationFailure
例外情况。修复了C扩展中int和float子类的序列化。
版本1.7中的更改¶
对于所有PyMongo用户,建议升级1.7版。下面是完整的发行说明,更深入的讨论重点是 here .
不再试图在big-endian系统上构建C扩展。
对使用无符号
Timestamp
在BSON编码器/解码器中。支持
True
作为"ok"
除了1.0
-服务器版本所必需的 >= 1.5.X中断更改为
index_information()
添加对查询唯一状态和其他索引信息的支持。补充
document_class
,为返回的文档指定类。补充 as_class 的参数
find()
,在BSON解码器中。允许 dropTarget 的参数
rename
.处理感知
datetime
转换为UTC实例。为添加了支持
max_scan
.提升
FileExists
创建重复的GridFS文件时出现异常。使用 y2038 对于C扩展中的时间处理-在安装扩展时消除了2038个问题。
补充 sort 参数到
find()
对版本更改的最终否决 <= 1.4
接受任何非 -
dict
作为"_id"
查询find_one()
或remove()
简化的代码找到主,因为配对设置并不总是有一个遥控器
修正了C编码器中某些无效类型的错误(比如
Collection
实例)。不要透明地映射
"filename"
关键name
属性。
版本1.6中的更改¶
版本1.6的最大变化是对 gridfs
与旧的实现相比有很多改进。中有许多使用新API的详细信息和示例 this blog post . 此版本中已删除旧的API,因此在升级到1.6之前需要修改现有代码。
修复了连接池被共享的问题
Connection
实例。在C扩展中对Python代码缓存的更多改进-应该可以改进modwsgi上的行为。
补充
from_datetime()
.完全重写
gridfs
支持。对
command()
应用程序编程接口。固定的
drop_indexes()
对不存在的集合的行为。不允许空大容量插入。
版本1.5.2中的更改¶
修复了在查询中忽略未知响应标志的响应处理。
处理包含'-pre-'的服务器版本。
版本1.5.1中的更改¶
补充
_id
的属性GridFile
实例。修复
Connection
(与 slave_okay set)直接复制到副本对中的从属服务器。接受夸克
create_index()
和ensure_index()
支持所有索引选项。添加
pymongo.GEO2D
支持地理索引。在C扩展中对Python代码缓存的改进-应该可以改善modwsgi上的行为。
版本1.5中的更改¶
已将子类型常量添加到
binary
模块。DEPRECATED options 参数
Collection()
和create_collection()
赞成夸格斯。补充
has_c()
检查C扩展名。补充
copy_database()
.补充
alive
告诉游标何时可能有更多的数据要返回(对于可裁剪的游标很有用)。补充
Timestamp
以更好地支持处理内部MongoDB时间戳。补充 name 的参数
create_index()
和ensure_index()
.带fork的固定连接池
paired()
接受所有允许的夸克Connection()
.insert()
返回大小为1的大容量插入的列表。固定处理
datetime.datetime
实例json_util
.补充
from_uri()
支持MongoDB连接uri方案。修正了未对齐时的块数计算
gridfs
.command()
为简单命令接受字符串。补充
system_js
处理服务器端JS的助手。不包装包含
"$query"
(支持手动使用"$min"
等)。补充
GridFSError
作为的基类gridfs
例外情况。
版本1.4中的更改¶
也许1.4版本中最重要的变化是我们决定 不再支持Python2.3 . 最直接的原因是允许对连接池进行一些改进。这也允许我们使用一些新的(如python2.4;)习惯用法,并有助于开始支持python3.0。如果您需要使用Python2.3,那么应该考虑使用该驱动程序的1.3版本,尽管它将不再受到积极支持。
其他变更:
移动
"_id"
仅对顶层文档进行正面处理(修复了一些转角情况)。已完成对1.2版或更早版本中不推荐使用的内容的删除。
强制集合名称不包含空字节。
修复以允许使用带有C扩展名的UTF-8集合名。
补充
PyMongoError
作为所有对象的基异常类errors
. 这在一定程度上改变了异常层次结构,如果依赖于ConnectionFailure
作为一个IOError
或InvalidBSON
作为一个ValueError
例如。补充
DuplicateKeyError
打电话给insert()
或update()
具有 safe 设置为True
.远离的
thread_util
.补充
add_user()
和remove_user()
帮手。修复
authenticate()
当使用非UTF-8名称或密码时。小修补程序
MasterSlaveConnection
.清理所有
ConnectionFailure
提高了。简化了连接池-使驱动程序的速度提高了2倍。看见 连接池在PyMongo中是如何工作的? 更多信息。
DEPRECATED pool_size , auto_start_request 和 timeout 参数到
Connection
. 已弃用start_request()
.使用
socket.sendall()
.远离的
from_xml()
因为它只用于一些内部测试-也消除了对elementtree
.执行
update()
在C.贬低
_command()
赞成command()
.发送所有命令而不换行为
{{"query": ...}}
.支撑管柱组件 key 参数
group()
(keyf)并将所有组作为命令运行。支持的平等测试
Code
实例。允许在字符串中使用空字节,而不允许在键名或正则表达式模式中使用空字节
版本1.3中的更改¶
去除
pymongo.cursor.Cursor.__len__()
,在1.1.1中已被弃用-需要积极地执行此操作,因为它会破坏存在状态 丹戈 模板 for 循环DEPRECATED
host()
,port()
,connection()
,name()
,database()
,name()
和full_name()
赞成host
,port
,connection
,name
,database
,name
和full_name
分别是。此更改的弃用计划可能会比通常更快,因为它会带来一些性能影响。补充
disconnect()
版本1.2.1中的更改¶
版本1.2中的更改¶
spec parameter for
remove()
is now optional to allow for deleting all documents in aCollection
始终用
{{query: ...}}
即使没有特殊选项,也可以避免对名为query
在客户端强制4MB文档限制
补充
map_reduce()
助手-请参见 example补充
distinct()
方法对Cursor
实例以允许distinct with查询修复
__getitem__()
之后skip()
允许任何UTF-8字符串进入
BSON
编码器,不仅仅是ASCII子集删除了对旧版的支持
ObjectId
格式-很肯定这是从来没有使用过,只是令人困惑DEPRECATED
url_encode()
和url_decode()
赞成str()
和ObjectId()
,分别允许 oplog.$main 作为有效的集合名称
安装过程中的一些小修补
在中添加了对datetime和regex的支持
json_util
版本1.1.2中的更改¶
改进
insert()
速度(使用C创建插入消息)使用随机数作为请求_id
用修正一些比赛条件
AutoReconnect
版本1.1.1中的更改¶
补充 multi 参数用于
update()
用C扩展修复unicode正则表达式模式
补充
distinct()
补充 database 支持
DBRef
补充
json_util
使用helpers将特殊类型编码/解码为JSONDEPRECATED
pymongo.cursor.Cursor.__len__()
赞成count()
具有 with_limit_and_skip 设置为True
由于性能回归将文档切换到Sphinx
版本1.1中的更改¶
大量的
insert()
适用于任何iterable修理
ObjectId
使用时生成multiprocessing
补充
collection
补充 network_timeout 参数用于
Connection()
DEPRECATED slave_okay 单个查询的参数
修复 safe 多线程模式
补充 safe 参数用于
remove()
补充 tailable 参数用于
find()
版本1.0中的更改¶
修复
MasterSlaveConnection
补充 finalize 参数用于
group()
改进
insert()
速度改进
gridfs
速度补充
__getitem__()
和__len__()
对于Cursor
实例
版本0.15.2中的更改¶
仅文档更改
版本0.15.1中的更改¶
各种性能改进
API更改不再需要为指定方向
create_index()
和ensure_index()
索引单个键时
版本0.14.2中的更改¶
小错误修复
版本0.14.1中的更改¶
seek()
和tell()
for(读取模式)GridFile
实例
版本0.11.3中的更改¶
字符串编码器中不允许空字节
Python2.3的修复
版本0.11.1中的更改¶
修复了python2.5下的连接池
版本0.11中的更改¶
更好的构建失败检测
在子文档中选择字段的驱动程序支持
不允许插入无效的键名
补充 timeout 参数用于
Connection()
版本0.10.3中的更改¶
修复大错误
limit()
当模块从C扩展下面重新加载时,最好的例外情况
调用
Collection
或Database
实例
版本0.10.1中的更改¶
别名
Connection
作为pymongo.Connection
在编码器中引发异常而不是静默溢出