Changelog#

版本4.6中的更改#

PyMongo 4.6带来了许多改进,包括:

  • 添加了 serverMonitoringMode URI和关键字参数 MongoClient

  • 在AWS Lambda、Google Cloud Functions和Microsoft Azure Functions等功能即服务(FAAS)环境中提高了客户端性能并降低了连接要求。

  • 添加了 pymongo.monitoring.CommandSucceededEvent.database_name 财产。

  • 添加了 pymongo.monitoring.CommandFailedEvent.database_name 财产。

  • 允许传递 dict 排序/CREATE_INDEX/HINT。

  • 增列 repr() 对写入结果类的支持: BulkWriteResultDeleteResultInsertManyResultInsertOneResultUpdateResult ,以及 RewrapManyDataKeyResult 。例如:

    >>> client.t.t.insert_one({})
    InsertOneResult(ObjectId('65319acdd55bb3a27ab5502b'), acknowledged=True)
    >>> client.t.t.insert_many([{} for _ in range(3)])
    InsertManyResult([ObjectId('6532f85e826f2b6125d6ce39'), ObjectId('6532f85e826f2b6125d6ce3a'), ObjectId('6532f85e826f2b6125d6ce3b')], acknowledged=True)
    
  • parse_uri() 现在考虑将定界斜杠 (/ )和可选的连接选项。例如,“mongodb://example.com?tls=true”现在是一个有效的URI。

4.5版中的更改#

PyMongo 4.5带来了许多改进,包括:

警告

PyMongo不再支持早于3.8的PyPy3版本。用户必须升级到PyPy3.8+。

解决的问题#

请参阅 PyMongo 4.5 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本4.4.1中的更改#

版本4.4.1修复了以下错误:

  • 修复了一个Bug,在该错误中,pymongo将引发 ConfigurationError: Invalid SRV host 连接到“MongoDB+srv://”URI时出错,该URI包含从DNS返回的SRV主机中的大写字母。 (PYTHON-3800) 。

  • 修复了C扩展中的一个小引用计数错误 (PYTHON-3798) 。

解决的问题#

请参阅 PyMongo 4.4.1 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

4.4版中的更改#

PyMongo 4.4带来了许多改进,包括:

  • 新增对MongoDB 7.0的支持。

  • 添加了对Python3.11的支持。

  • 添加了对将包含(键、方向)对或键的列表传递到 create_index()

  • 改进的BSON编码性能 (PYTHON-3717PYTHON-3718 )。

  • 改进了对Pyright的支持,以改进对诸如Visual Studio代码或Visual Studio之类的IDE的类型支持。

  • 改进了对MyPy“Strong”模式的类型检查的支持 (--strict )。

  • 增列 create_encrypted_collection()EncryptedCollectionErrorencrypt_expression()RangeOpts ,以及 RANGEPREVIEW 作为实验性可查询加密测试版的一部分。

  • 现在需要pymongocrypt 1.6.0或更高版本 使用中的加密 支持。MongoDB Server7.0对QE协议引入了一项向后的突破性更改。使用可查询加密测试版的用户现在必须升级到MongoDB 7.0+和PyMongo 4.4+。

  • 之前,PyMongo的文档建议使用 datetime.datetime.utcnow()datetime.datetime.utcfromtimestamp() 。由于解释的原因,在Python3.12中不建议使用utcnow和utcfrom时间戳 in this Github issue 。相反,用户应该使用 datetime.datetime.now(tz=timezone.utc)()datetime.datetime.fromtimestamp(tz=timezone.utc)() 取而代之的是。

解决的问题#

请参阅 PyMongo 4.4 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

4.3.3版中的更改#

版本4.3.3记录了对以下各项的支持:

错误修复#

解决的问题#

请参阅 PyMongo 4.3.3 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本4.3(4.3.2)中的更改#

注意:由于版本处理错误和必要的文档更新,我们暂停将标签4.3.0和4.3.1上传到PYPI。

dnspython 现在是必需的依赖项。此更改使PyMongo更易于安装,以便与“MongoDB+srv://”连接字符串和 MongoDB Atlas

PyMongo 4.3带来了许多改进,包括:

  • 添加了对超出Python支持的范围的bson日期时间进行解码的支持 datetime 内置式。看见 处理超出范围的日期时间 例如,以及 bson.datetime_ms.DatetimeMSbson.codec_options.DatetimeConversion ,以及 bson.codec_options.CodecOptions %s datetime_conversion 参数了解更多详细信息 (PYTHON-1824) 。

  • PyMongo现在在子进程中重置其锁定和其他共享状态 os.fork() 以减少死锁的频率。请注意,死锁仍然是可能的,因为在多线程应用程序中,不能使诸如OpenSSL之类的PyMongo依赖的库成为fork()安全的。 (PYTHON-2484) 。有关更多信息,请参阅 PyMongo fork安全吗?

  • 当与MongoDB 6.0+配合使用时, ChangeStream S现在允许使用新参数记录新类型的事件(如DDL和C2C复制事件 show_expanded_events 可以传递给方法(如 watch()

  • PyMongo现在内部缓存从AWS端点获取的AWS凭据,以避免速率限制。当凭据过期或遇到错误时,将清除缓存。

  • 在使用 MONGODB-AWS 身份验证机制,使用 aws 此外,凭据获取的行为已随 pymongo_auth_aws>=1.1.0 。请看 身份验证示例 以获取更多信息。

错误修复#

  • 修复了以下位置的错误 ChangeStream 将允许应用程序重试呼叫 next()try_next() 即使在不可恢复的错误之后 (PYTHON-3389) 。

  • 修复了客户端在同时进行副本集选举和重新配置后可能无法发现新的主节点的错误 (PYTHON-2970) 。

解决的问题#

请参阅 PyMongo 4.3 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

4.2版中的更改#

警告

PyMongo 4.2放弃了对Python3.6的支持:现在需要使用Python3.7+。

PyMongo 4.2带来了许多改进,包括:

错误修复#

不可避免的突破性变化#

  • 现在需要pymongocrypt 1.3.0或更高版本才能支持客户端字段级加密。

  • estimated_document_count() 现在总是使用 count 指挥部。由于MongoDB 5.0.0-5.0.8版本中的疏忽,COUNT命令不包括在 MongoDB Stable API 。建议使用带有ESTIMATED_DOCUMENT_COUNT的稳定API的用户将服务器版本升级到5.0.9+或SET pymongo.server_api.ServerApi.strictFalse 避免遇到错误 (PYTHON-3167) 。

  • 从中删除泛型类型 ClientSession 改善对派赖特的支持 (PYTHON-3283) 。

  • 增列 __all__ BSON、PYMOGO和GRIDFS包。对于依赖于 from bson import * 导入中不存在的API的步骤 __all__ (PYTHON-3311) 。

解决的问题#

请参阅 PyMongo 4.2 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本4.1.1中的更改#

版本4.1.1修复了许多错误:

  • 修复了调用 decode_all() 无.class=‘class 3’> codec_options 论辩 (PYTHON-3222) 。

  • 修复了以下位置的错误 decode_all() 没有接受 codec_options 作为关键字参数 (PYTHON-3222) 。

  • 修复了我们的发行版中没有包含类型标记(py.type文件)的问题 (PYTHON-3214) 。

  • 修复了在未安装dnspython依赖项的情况下,在尝试解析“MongoDB+srv://”URI时,pymongo会引发“NameError:Name sys is not fined”异常的错误 (PYTHON-3198) 。

解决的问题#

请参阅 PyMongo 4.1.1 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

4.1版中的更改#

警告

PyMongo 4.1放弃了对Python3.6.0和3.6.1的支持,现在需要Python3.6.2+。

PyMongo 4.1带来了许多改进,包括:

错误修复#

解决的问题#

请参阅 PyMongo 4.1 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本4.0中的更改#

警告

PyMongo 4.0不再支持Python2.7、3.4和3.5。

警告

PyMongo 4.0放弃了对MongoDB 2.6、3.0、3.2和3.4的支持。

警告

PyMongo 4.0会更改 directConnection URI选项和关键字参数 MongoClientFalse 而不是 None ,允许自动发现副本集。这意味着,如果您想要直接连接到单个服务器,则必须通过 directConnection=True 作为URI选项或关键字参数。有关更多详细信息,请参阅PyMongo 4.x迁移指南的相关部分: directConnection 缺省值为False

PyMongo 4.0带来了许多改进,同时也带来了一些突破性的变化。例如,所有在PyMongo 3.x中不推荐使用的API都已被移除。请务必阅读下面列出的更改以及 PyMongo 4迁移指南 在从PyMongo 3.x升级之前。

4.0中的突破性变化#

  • 删除了对Python2.7、3.4和3.5的支持。现在需要使用Python3.6.2+。

  • 的默认UUID_表示法 CodecOptionsJSONOptions ,以及 MongoClient 已从 bson.binary.UuidRepresentation.PYTHON_LEGACYbson.binary.UuidRepresentation.UNSPECIFIED 。正在尝试对 uuid.UUID 实例设置为BSON或JSON,现在默认情况下会生成错误。看见 处理UUID数据 了解更多细节。

  • 删除了 waitQueueMultiple 关键字参数为 MongoClient 并被移除 pymongo.errors.ExceededMaxWaiters

  • 删除了 socketKeepAlive 关键字参数为 MongoClient

  • 已删除 pymongo.mongo_client.MongoClient.fsync()pymongo.mongo_client.MongoClient.unlock() ,以及 pymongo.mongo_client.MongoClient.is_locked

  • 已删除 pymongo.mongo_client.MongoClient.database_names()

  • 已删除 pymongo.mongo_client.MongoClient.max_bson_size

  • 已删除 pymongo.mongo_client.MongoClient.max_message_size

  • 已删除 pymongo.mongo_client.MongoClient.max_write_batch_size

  • 已删除 pymongo.mongo_client.MongoClient.event_listeners

  • 已删除 pymongo.mongo_client.MongoClient.max_pool_size

  • 已删除 pymongo.mongo_client.MongoClient.max_idle_time_ms

  • 已删除 pymongo.mongo_client.MongoClient.local_threshold_ms

  • 已删除 pymongo.mongo_client.MongoClient.server_selection_timeout

  • 已删除 pymongo.mongo_client.MongoClient.retry_writes

  • 已删除 pymongo.mongo_client.MongoClient.retry_reads

  • 已删除 pymongo.database.Database.eval()pymongo.database.Database.system_jspymongo.database.SystemJS

  • 已删除 pymongo.database.Database.collection_names()

  • 已删除 pymongo.database.Database.current_op()

  • 已删除 pymongo.database.Database.authenticate()pymongo.database.Database.logout()

  • 已删除 pymongo.database.Database.error()pymongo.database.Database.last_status()pymongo.database.Database.previous_error()pymongo.database.Database.reset_error_history()

  • 已删除 pymongo.database.Database.add_user()pymongo.database.Database.remove_user()

  • 删除了对数据库分析器帮助器的支持 profiling_level()set_profiling_level() ,以及 profiling_info() 。相反,用户应该运行 profile commandcommand() 直接帮手。

  • 已删除 pymongo.OFFpymongo.SLOW_ONLY ,以及 pymongo.ALL

  • 已删除 pymongo.collection.Collection.parallel_scan()

  • 已删除 pymongo.collection.Collection.ensure_index()

  • 已删除 pymongo.collection.Collection.reindex()

  • 已删除 pymongo.collection.Collection.save()

  • 已删除 pymongo.collection.Collection.insert()

  • 已删除 pymongo.collection.Collection.update()

  • 已删除 pymongo.collection.Collection.remove()

  • 已删除 pymongo.collection.Collection.find_and_modify()

  • 已删除 pymongo.collection.Collection.count()

  • 已删除 pymongo.collection.Collection.initialize_ordered_bulk_op()pymongo.collection.Collection.initialize_unordered_bulk_op() ,以及 pymongo.bulk.BulkOperationBuilder 。使用 pymongo.collection.Collection.bulk_write() 取而代之的是。

  • 已删除 pymongo.collection.Collection.group()

  • 已删除 pymongo.collection.Collection.map_reduce()pymongo.collection.Collection.inline_map_reduce()

  • 删除了 useCursor 选项 aggregate()

  • 已删除 pymongo.mongo_client.MongoClient.close_cursor() 。使用 pymongo.cursor.Cursor.close() 取而代之的是。

  • 已删除 pymongo.mongo_client.MongoClient.kill_cursors()

  • 已删除 pymongo.cursor_manager.CursorManagerpymongo.cursor_manager

  • 已删除 pymongo.mongo_client.MongoClient.set_cursor_manager()

  • 已删除 pymongo.cursor.Cursor.count()

  • 已删除 pymongo.thread_util

  • 已删除 MongoReplicaSetClient

  • 已删除 IsMaster 。使用 Hello 取而代之的是。

  • 已删除 pymongo.son_manipulatorpymongo.son_manipulator.SONManipulatorpymongo.son_manipulator.ObjectIdInjectorpymongo.son_manipulator.ObjectIdShufflerpymongo.son_manipulator.AutoReferencepymongo.son_manipulator.NamespaceInjectorpymongo.database.Database.add_son_manipulator()pymongo.database.Database.outgoing_copying_manipulatorspymongo.database.Database.outgoing_manipulatorspymongo.database.Database.incoming_copying_manipulators ,以及 pymongo.database.Database.incoming_manipulators

  • 删除了 manipulatemodifiers 参数来自 find()find_one()find_raw_batches() ,以及 Cursor()

  • 已删除 pymongo.message.delete()pymongo.message.get_more()pymongo.message.insert()pymongo.message.kill_cursors()pymongo.message.query() ,以及 pymongo.message.update()

  • 已删除 pymongo.errors.NotMasterError 。使用 pymongo.errors.NotPrimaryError 取而代之的是。

  • 已删除 pymongo.errors.CertificateError

  • 已删除 pymongo.GEOHAYSTACK

  • 已删除 bson.binary.UUIDLegacy

  • 已删除 bson.json_util.STRICT_JSON_OPTIONS 。使用 RELAXED_JSON_OPTIONSCANONICAL_JSON_OPTIONS 取而代之的是。

  • 将默认的JSON编码表示从遗留更改为松弛。的json_mode参数 bson.json_util.dumps 现在默认为 RELAXED_JSON_OPTIONS

  • 更改了的BSON和JSON解码行为 DBRef 中概述的行为匹配 DBRef specification 版本1.0。具体地说,PyMongo现在只将子文档解码为 DBRef 当且仅当,它包含两者 $ref$id 字段和 $ref$id ,以及 $db 字段的类型正确。否则,文档将照常返回。以前,任何包含 $ref 字段将被解码为 DBRef

  • 额外的“TLS”安装不再是必需的,也不再受支持,并且将被pip忽略。

  • 这个 tz_aware 参数为 JSONOptions 现在默认为 False 而不是 Truebson.json_util.loads() 现在默认情况下将DateTime解码为naive。看见 tz_aware defaults to False 更多信息。

  • directConnection URI选项和关键字参数 MongoClient 默认为 False 而不是 None ,允许自动发现副本集。这意味着,如果您想要直接连接到单个服务器,则必须通过 directConnection=True 作为URI选项或关键字参数。

  • 这个 hint 选项现在是必填项 minmax 查询使用 find()

  • name 现在是的必需参数 pymongo.driver_info.DriverInfo 班级。

  • 向提供“MongoDB+srv://”URI时 MongoClient 构造函数,现在可以使用 srvServiceName URI选项指定您自己的SRV服务名称。

  • items() 现在返回一个 dict_items 对象而不是列表。

  • 已删除 bson.son.SON.iteritems()

  • CollectionDatabase 现在作为布尔值求值时引发错误,请使用以下语法 if collection is not None:if database is not None: 与之前的语法相反,它只是简单地 if collection:if database: 。现在,您必须显式地与NONE进行比较。

  • MongoClient 关闭后不能执行任何操作。之前的行为将简单地重新连接。但是,现在您必须创建一个新实例。

  • 班级 Int64MinKeyMaxKeyTimestampRegex ,以及 DBRef 所有实施 __slots__ 现在。这意味着它们的属性是固定的,不能在运行时向它们添加新的属性。

  • Empty projections (eg {} or []) for find(), and find_one() are passed to the server as-is rather than the previous behavior which substituted in a projection of {"_id": 1}. This means that an empty projection will now return the entire document, not just the "_id" field.

  • MongoClient 现在引发一个 ConfigurationError 当多个URI传递到 hosts 争论。

  • MongoClient ‘现在引发一个 InvalidURI 在解析MongoDB URI时,在用户名和密码中遇到未转义的百分号时异常。

  • 比较两个 MongoClient 实例现在使用一组不可变的属性,而不是 address 这是可以改变的。

  • 删除了 disable_md5 的参数 GridFSBucketGridFS 。看见 DISABLE_MD5参数已删除 了解更多细节。

  • 现在需要pymongocrypt 1.2.0或更高版本才能支持客户端字段级加密。

显著改善#

  • 增强的连接池可更高效地创建连接并避免连接风暴。

  • 添加了 maxConnecting URI和 MongoClient 关键字参数。

  • MongoClient 现在接受URI和关键字参数 srvMaxHosts 这限制了客户端将连接到的类蒙古主机的数量。更具体地说,当MongoDB+srv://连接字符串解析为 srvMaxHosts 主机数量时,客户端将随机选择一个 srvMaxHosts 大小的主机子集。

  • 增列 pymongo.mongo_client.MongoClient.options 用于对客户端的配置选项进行只读访问。

  • 支持“KMIP”KMS提供程序进行客户端字段级加密。请参阅的文档字符串 AutoEncryptionOptsencryption

解决的问题#

请参阅 PyMongo 4.0 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

3.12.0版中的更改#

警告

PyMongo 3.12.0不支持对Python2.7、3.4和3.5的支持。这些版本的Python不受PyMongo 4支持。

警告

现在,PyMongo允许插入关键字包含点(‘.)的文档或者从美元符号(‘$’)开始。

  • 现在需要pymongocrypt 1.1.0或更高版本才能支持客户端字段级加密。

  • 迭代遍历 gridfs.grid_file.GridOut 现在逐行移动文件,而不是逐块移动,并且不会在同一对象上的后续迭代中从顶部重新开始。打电话 seek(0) 以重置迭代器。

显著改善#

错误修复#

  • 修复了在自动客户端字段级加密过程中可能导致驱动程序死锁的错误 (PYTHON-2472) 。

  • 修复了垃圾收集未关闭的排气时可能出现的死锁 Cursor

  • 修正了使用gevent.超时操作超时可能导致死锁。

  • 修复了Atlas Data Lake的以下错误。在关闭游标时,pymongo现在发送带有返回游标的初始命令响应的命名空间的KILL CURSOR。

  • 修复了中的错误 RawBatchCursor 这导致在游标不包含任何结果时返回空字节串。它现在提高了 StopIteration 取而代之的是。

不推荐使用#

  • 已弃用对Python2.7、3.4和3.5的支持。

  • 已弃用对数据库探查器帮助器的支持 profiling_level()set_profiling_level() ,以及 profiling_info() 。相反,用户应该运行 profile commandcommand() 直接帮手。

  • 已弃用 NotMasterError 。用户应使用 NotPrimaryError 取而代之的是。

  • 已弃用 IsMasterismaster 在PyMongo 4.0中将被移除,取而代之 Hellohello 它们提供相同的API。

  • 不推荐使用 pymongo.messeage 模块。

  • 不推荐使用 ssl_keyfilessl_certfile 支持的URI选项 tlsCertificateKeyFile (见 TLS/SSL和PyMongo )。

解决的问题#

请参阅 PyMongo 3.12.0 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本3.11.3中的更改#

解决的问题#

版本3.11.3修复了一个错误,该错误阻止PyMongo在 writeConcernError 在MongoDB 4.4+上 (PYTHON-2452)

请参阅 PyMongo 3.11.3 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本3.11.2中的更改#

解决的问题#

版本3.11.2包含许多错误修复。亮点包括:

请参阅 PyMongo 3.11.2 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本3.11.1中的更改#

版本3.11.1添加了对Python3.9的支持,并包括许多错误修复。亮点包括:

解决的问题#

请参阅 PyMongo 3.11.1 release notes in JIRA 有关此版本中已解决问题的列表,请参阅。

版本3.11.0中的更改#

版本3.11增加了对mongodb4.4的支持,并包含了许多错误修复。亮点包括:

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 而是命令。有关详细信息,请参阅文档。

  • 已弃用 bson.binary.UUIDLegacy 。使用 bson.binary.Binary.from_uuid() 取而代之的是。

不可避免的重大变化:

  • GridFSBucket and GridFS 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发布以来发现的以下问题:

解决的问题#

PyMongo 3.10.1 release notes in JIRA 有关此版本中已解决问题的列表。

版本3.10.0中的更改#

版本3.10包括一些改进和错误修复。亮点包括:

  • MongoDB 4.2支持客户端字段级加密。看到了吗 使用中的加密 举个例子。

  • 支持Python3.8。

  • 补充 pymongo.client_session.ClientSession.in_transaction .

  • 在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。看到了吗 Transactions .

  • 新方法 pymongo.client_session.ClientSession.with_transaction() 支持在会话中使用自动重试和最多一次语义来方便地运行事务。

  • 对客户端字段级加密的初始支持。请参见docstring MongoClientAutoEncryptionOptsencryption 有关详细信息。 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 specificationMongoClient() 建造师。因此,连接选项有许多变化:

    • 这个 tlsInsecure 已添加选项。

    • 这个 tls 已添加选项。年长的 ssl 选项作为新的 tls 选择权。

    • wTimeout 已弃用,赞成 wTimeoutMS .

    • wTimeoutMS 现在覆盖 wTimeout 如果用户同时提供。

    • j 已弃用,赞成 journal .

    • journal 现在覆盖 j 如果用户同时提供。

    • ssl_cert_reqs 已弃用,赞成 tlsAllowInvalidCertificates . 而不是 ssl.CERT_NONEssl.CERT_OPTIONALssl.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() .

  • 新的BSON实用程序函数 encode()decode()

  • 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。RHEL 6用户应从安装Python2.7或更高版本 Red Hat Software Collections 。CentOS 6用户应从以下位置安装Python2.7或更新版本 SCL

警告

PyMongo不再支持早于3.5的PyPy3版本。用户必须升级到PyPy3.5+。

  • ObjectId 现在实现 ObjectID specification version 0.2 .

  • 为了获得更好的性能并更好地遵循GridFS规范, GridOut 现在使用一个游标来读取文件中的所有块。以前,文件中的每个块都是使用 find_one() .

  • gridfs.grid_file.GridOut.read() 现在只在读取整个文件后检查额外的块。以前,这个方法会在每次调用时检查额外的块。

  • current_op() 现在总是使用 Databasecodec_options 当解码命令响应时。以前,codec_选项仅在MongoDB服务器版本<=3.0时使用。

  • 未删节的 get_default_database() 并添加了 default 参数。

  • TLS重新协商现在可以禁用。

  • 自定义类型现在可以使用 TypeCodecTypeRegistry 原料药。有关详细信息,请参见 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 (违约), javaLegacycsharpLegacystandard . 新应用程序应考虑将此设置为 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的支持。亮点包括:

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 .

亮点包括:

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_LEGACYbson.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发布以来报告的错误:

解决的问题#

PyMongo 3.5.1 release notes in JIRA 有关此版本中已解决问题的列表。

版本3.5中的更改#

版本3.5实现了许多改进和错误修复:

亮点包括:

变更和反对:

  • find() 有新的选择 return_keyshow_record_idsnapshothintmax_time_msmax_scanminmaxcomment . 已弃用该选项 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_OPTIONSCANONICAL_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() 现在提出 TypeErrorValueError 使用错误类型的值或任何额外的键解析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:

  • 改进了对记录服务器发现和监视事件的支持。看到了吗 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选项从 maxStalenessMSmaxStalenessSeconds ,其最小值已从两次更改 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 有关详细信息。

  • 新建连接池选项 minPoolSizemaxIdleTimeMS .

  • 新的 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中引入的新服务器特性。

亮点包括:

备注

确定的 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,它可以将操作路由到使用时不处于主或辅助状态的副本集成员 PrimaryPreferredNearest . 建议所有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更改#

什么时候? sslTrue 这个 ssl_cert_reqs 选项现在默认为 ssl.CERT_REQUIRED 如果没有提供。PyMongo将尝试加载OS提供的CA证书来验证服务器,引发 ConfigurationError 如果不能。

Gevent支架#

在以前的版本中,PyMongo支持Gevent有两种模式:可以调用 gevent.monkey.patch_socket() 及格 use_greenlets=TrueMongoClient ,或者你可以直接打电话 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 应用程序编程接口。

过时的类 MasterSlaveConnectionConnectionReplicaSetConnection 被移除。

这个 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_requestin_requestend_request 都被移除了 auto_start_request 选项。请求的目的是使读写一致性更有可能与 w=0 写下关注点。此外,请求中的线程将同一成员用于副本集中的所有辅助读取。为了确保pymongo3.0中的读写一致性,不要用重写默认的写关注点 w=0 ,并且不重写默认值 read preference 初级的。

支持 slaveOk (或) slave_okaysafenetwork_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_optionsset_lasterror_optionsunset_lasterror_options 方法被删除。写入问题选项可以传递给 MongoClient 作为关键字参数或MongoDB URI选项。

这个 get_database() 方法用于获取数据库实例,该实例的选项配置与MongoClient的不同。

已添加以下只读属性:

以下属性现在是只读的:

已删除以下属性:

已重命名以下属性:

  • secondary_acceptable_latency_ms 现在是 local_threshold_ms 现在是只读的。

Cursor 变化#

这个 conn_id 属性已重命名为 address .

光标管理更改#

CursorManagerset_cursor_manager() 不再被弃用。如果你的子类 CursorManager 你的实现 close() 现在必须接受第二个参数, address . 这个 BatchCursorManager 类被删除。

第二个参数 close_cursor() 重命名自 _conn_idaddress . kill_cursors() 现在接受一个 address 参数。

Database 变化#

这个 connection 属性已重命名为 client .

已添加以下只读属性:

以下属性现在是只读的:

使用 get_database() 获取一个数据库实例,该实例的选项配置与MongoClient的不同。

已删除以下属性:

  • safe

  • secondary_acceptable_latency_ms

  • slave_okay

  • tag_sets

增加了以下方法:

更改了以下方法:

  • command() . 支持 as_classuuid_subtypetag_setssecondary_acceptable_latency_ms 已被删除。您可以改为传递 CodecOptions 作为 codec_options 以及从中读取首选项类的实例 read_preferences 作为 read_preference . 这个 fieldscompile_re 选项也会被删除。这个 fields 选项没有记录,从来没有真正起作用。正则表达式总是被解码为 Regex .

以下方法已被弃用:

  • add_son_manipulator()

已删除以下方法:

这个 get_lasterror_optionsset_lasterror_optionsunset_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_sizedrop_dups 用于别名 bucketSizedropDups .

不推荐使用以下方法:

  • save()

  • insert()

  • update()

  • remove()

  • find_and_modify()

  • ensure_index()

已删除以下方法:

这个 get_lasterror_optionsset_lasterror_optionsunset_lasterror_options 方法已被删除。使用 WriteConcern 具有 with_options() 相反。

改变到 find()find_one()#

以下“查找/查找”选项已重命名:

只有当您将这些重命名作为关键字参数(如find(fields))传递时,这些重命名才会影响代码= ['字段名'] ). 如果只传递位置参数,则这些更改对于应用程序来说并不重要。

  • 规格->过滤器

  • 字段->投影

  • 部分->允许部分结果

添加了以下查找/查找选项:

  • 光标类型(请参见 CursorType 价值观)

  • oplog_replay

  • 修饰语

已删除以下“查找/查找”选项:

  • 网络超时(使用 max_time_ms() 相反)

  • slave_okay(使用 read_preferenceswith_options() 相反)

  • read_首选项(使用 with_options() 相反)

  • 标记集(使用 read_preferenceswith_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 保持以前的行为。

errors 变化#

异常类 UnsupportedOptionTimeoutError 被删除。

gridfs 变化#

从Pymongo1.6开始,方法 openclose 属于 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_classtz_awareuuid_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发布以来报告的问题。

解决的问题#

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_optionscommand() 提出多余的 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编写。请参阅 PyMongo 3 Migration Guide 查看详细的示例。

备注

对于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() .

  • 这个 count() 方法将使用一个提示,如果通过 hint() .

  • 连接池的新socketKeepAlive选项。

  • 新的基于发生器的BSON解码函数, decode_iter()decode_file_iter() .

  • 支持wiredtiger等替代存储引擎的内部更改。

备注

对于PyMongo3.0中将要删除的特性,此版本中有许多不推荐使用的特性。其中包括:

  • start_request()

  • in_request()

  • end_request()

  • copy_database()

  • error()

  • last_status()

  • previous_error()

  • reset_error_history()

  • 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是一个主要的版本,有大量的新特性和错误修复。亮点包括:

正在中断更改#

版本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.1中的更改#

版本2.6.1修复了 insert() 方法。

解决的问题#

PyMongo 2.6.1 release notes in JIRA 有关此版本中已解决问题的列表。

版本2.6中的更改#

版本2.6包含了一些经常要求的改进,并增加了对一些早期MongoDB 2.6特性的支持。

特别感谢justinpatrin在这个版本中对连接池所做的工作。

重要的新功能:

  • 这个 max_pool_size 选项 MongoClientMongoReplicaSetClient 现在实际上限制了池将并发打开的套接字数量。一旦池达到max_pool_size,操作就会阻塞,等待套接字变为可用。如果 waitQueueTimeoutMS ,则阻塞等待套接字的操作将引发 ConnectionFailure 在暂停之后。默认情况下 waitQueueTimeoutMS 未设置。看见 作为Pandas,PyMongo可以帮助我加载查询结果吗 DataFrame ? 以获取更多信息。

  • 这个 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 比必要的大。如果应用程序接受默认值,则继续这样做。

作为Pandas,PyMongo可以帮助我加载查询结果吗 DataFrame ? 更多信息。

解决的问题#

PyMongo 2.6 release notes in JIRA 有关此版本中已解决问题的列表。

版本2.5.2中的更改#

版本2.5.2修复了对无效的 DBRef .

解决的问题#

PyMongo 2.5.2 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中新功能的更改。

重要的新功能:

  • 支持 GSSAPI (Kerberos) authentication .

  • 支持主机名匹配的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包括一些重要的新特性和大量的错误修复。

重要的新功能:

  • 新的 MongoClientMongoReplicaSetClient 类-默认情况下,这些连接类执行已确认的写入操作(以前称为“安全”写入)。 ConnectionReplicaSetConnection 已弃用,但仍支持旧的默认fire-and-forget行为。

  • 一个新的写关注点API实现为 write_concern 连接上的属性, DatabaseCollection 类。

  • MongoClient (和 Connection )现在支持Unix域套接字。

  • Cursor 可以使用函数从 copy 模块。

  • 这个 set_profiling_level() 方法现在支持 slow_ms 选择权。

  • 复制集监视任务(由使用 MongoReplicaSetClientReplicaSetConnection )又是一个守护线程,这意味着您不必调用 close() 在退出python交互式shell之前。

警告

的构造函数 MongoClientMongoReplicaSetClientConnectionReplicaSetConnection 现在提高 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开始,当服务器的 authentication features 都已启用。需要对PyMongo进行更改才能支持此行为更改。身份验证的用户必须升级到PyMongo 2.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也参与了本次发布。

重要的新功能:

警告

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_datapartial 光标标志。如果 await_data 标志设置在 tailable 游标服务器将阻塞一段时间,等待更多数据返回。这个 partial 标志告诉mongos,如果不是所有的碎片都可用,则返回查询的部分数据。

  • map_reduce() 将接受 dict 或者是 SON 作为 out 参数。

  • URI解析器已经被移到它自己的模块中,可以由应用程序代码直接使用。

  • 自动侦测异常现在提供有关实际发生的错误的信息,而不是一般的失败消息。

  • 添加了许多新的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更改所必需的。此方法现在还采用可选的 scandatafull 参数。有关详细信息,请参阅文档。

警告

这个 pool_sizeauto_start_requesttimeout 的参数 Connection 已在此版本中完全删除。它们在pymongo-1.4中被弃用,此后没有任何效果。请确保您的代码当前在创建连接实例时没有传递这些参数。

解决的问题#

版本1.10.1中的更改#

版本1.10.1主要是一个错误修复版本。它修复了版本1.10中的一个回归,该版本打破了objectid的酸洗。其他一些错误也被修复了。

有两种行为变化需要注意:

  • 如果读从设备启动 AutoReconnect MasterSlaveConnection 现在将在每个从属服务器上重试查询,直到查询成功或所有从属服务器都已引发 AutoReconnect . 任何其他例外情况都将立即提出。奴隶被审判的顺序是随机的。以前,读取的数据将被发送到一个随机选择的从属服务器,并且 AutoReconnect 在连接失败的情况下立即引发。

  • Python long 现在总是BSON编码为int64。以前编码只基于字段和 long 值小于 2147483648 或大于 -2147483649 总是被BSON编码为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选项不会由Cursor.Clone传播

  • 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 包裹。以下模块已重命名:

此外,以下异常类已重命名:

以上异常现在继承自 bson.errors.BSONError 而不是 pymongo.errors.PyMongoError .

备注

上面所有重命名的模块和异常都使用旧名称创建别名,因此这些更改不应破坏现有代码。旧名称最终将被弃用,然后被删除,因此用户现在应该开始向新名称迁移。

警告

对上述异常层次结构的更改可能正在中断。如果你的代码有问题 PyMongoError ,则 bson 不会被抓,即使他们以前也会被抓。在升级之前,建议用户检查是否存在类似情况。

  • C扩展现在与Ruby驱动程序共享buffer.C/h

  • bson 不再加薪 InvalidName ,所有引用都已替换为 InvalidDocument .

  • 更名 bson._to_dicts()decode_all() .

  • 更名 from_dict()encode()to_dict()decode() .

  • 补充 batch_size() .

  • 允许在 GridIn 实例已关闭。

  • 从GridFS读取的性能改进。

  • 具有相同开始和停止的特殊大小写切片以返回空光标。

  • 允许写入 unicode 如果 encoding 已为文件指定属性。

  • 补充 gridfs.GridFS.get_version() .

  • 变量范围 Code 现在可以指定为关键字参数。

  • 补充 readline()GridOut .

  • 如果 Connection 已经闲置了一段时间了。

  • 补充 list()SystemJS .

  • 补充 file_document 参数 GridOut() 允许从现有文件文档初始化。

  • 提升 TimeoutError 即使 getLastError 命令是手动运行的,而不是通过“安全”模式。

  • 补充 uuid 支持 json_util .

版本变更#

  • 修正了C扩展中可能导致安全模式操作报告失败的错误 (SystemError )即使没有发生。

  • 增加了一个 __ne__() 我们定义的任何类的实现 __eq__() .

版本1.8中的更改#

版本1.8增加了对连接到副本集的支持,为 wwtimeout ,并解码为时区感知的日期时间。

  • 修正了解码a时C扩展中的一个引用泄漏 DBRef .

  • 为添加了支持 wwtimeoutfsync (以及任何其他选项 getLastError )“安全模式”操作。

  • 补充 nodes 财产。

  • 添加了10个套接字的最大池大小。

  • 增加了对副本集的支持。

  • DEPRECATED from_uri()paired() ,两者都被中的扩展功能所取代 Connection() .

  • 在中添加了对datetimes的支持 ObjectIdTimestampjson_util 方法。

  • 补充 drop() 帮手。

  • Connection 是首次创建的。

  • 为添加了支持 MinKeyMaxKeyTimestampjson_util .

  • 添加了对将日期时间解码为可感知(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扩展。

  • 补充 MinKeyMaxKey .

  • 对使用无符号 Timestamp 在BSON编码器/解码器中。

  • 支持 True 作为 "ok" 除了 1.0 -服务器版本所必需的 >= 1.5.X

  • 中断更改为 index_information() 添加对查询唯一状态和其他索引信息的支持。

  • 补充 document_class ,为返回的文档指定类。

  • 补充 as_class 的参数 find() ,在BSON解码器中。

  • 添加了对创建 Timestamp 使用 datetime .

  • 允许 dropTarget 的参数 rename .

  • 处理感知 datetime 转换为UTC实例。

  • 为添加了支持 max_scan .

  • 提升 FileExists 创建重复的GridFS文件时出现异常。

  • 使用 y2038 用于C扩展中的时间处理-在安装扩展时消除2038个问题。

  • 补充 sort 参数到 find()

  • 对版本更改的最终否决 <= 1.4

  • 接受任何非 -dict 作为 "_id" 查询 find_one()remove()

  • 增加了通过 dict 对于 fields 参数 find() (支撑件 "$slice" 和字段否定)

  • 简化的代码找到主,因为配对设置并不总是有一个遥控器

  • 修正了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" 仅对顶层文档进行正面处理(修复了一些转角情况)。

  • update()remove() 将整个响应返回到 上一个错误 安全时指挥 True .

  • 已完成对1.2版或更早版本中不推荐使用的内容的删除。

  • 强制集合名称不包含空字节。

  • 修复以允许使用带有C扩展名的UTF-8集合名。

  • 补充 PyMongoError 作为所有对象的基异常类 errors . 这在一定程度上改变了异常层次结构,如果依赖于 ConnectionFailure 作为一个 IOErrorInvalidBSON 作为一个 ValueError 例如。

  • 补充 DuplicateKeyError 打电话给 insert()update() 具有 safe 设置为 True .

  • 远离的 thread_util .

  • 补充 add_user()remove_user() 帮手。

  • 修复 authenticate() 当使用非UTF-8名称或密码时。

  • 小修补程序 MasterSlaveConnection .

  • 清理所有 ConnectionFailure 提高了。

  • 简化了连接池-使驱动程序的速度提高了2倍。看见 作为Pandas,PyMongo可以帮助我加载查询结果吗 DataFrame ? 更多信息。

  • DEPRECATED pool_sizeauto_start_requesttimeout 参数到 Connection . 已弃用 start_request() .

  • 使用 socket.sendall() .

  • 远离的 from_xml() 因为它只用于一些内部测试-也消除了对 elementtree .

  • 执行 update() 在C.

  • 贬低 _command() 赞成 command() .

  • 发送所有命令而不换行为 {{"query": ...}} .

  • 支撑管柱组件 key 参数 group() (keyf)并将所有组作为命令运行。

  • 支持的平等测试 Code 实例。

  • 允许在字符串中使用空字节,而不允许在键名或正则表达式模式中使用空字节

版本1.3中的更改#

  • 不推荐运行 group() 作为 eval() ,也更改了的默认值 group() 作为命令运行

  • 去除 pymongo.cursor.Cursor.__len__() ,在1.1.1中已被弃用-需要积极地执行此操作,因为它会破坏存在状态 丹戈 模板 for 循环

  • DEPRECATED host()port()connection()name()database()name()full_name() 赞成 hostportconnectionnamedatabasenamefull_name 分别是。此更改的弃用计划可能会比通常更快,因为它会带来一些性能影响。

  • 补充 disconnect()

版本1.2.1中的更改#

  • 补充 Changelog 到文档

  • 补充 setup.py doc --test 为教程运行doctests,示例

  • 将大多数示例移到Sphinx文档中(并从 examples/ 目录)

  • 提升 InvalidId 而不是 TypeError 将24个字符的字符串传递给 ObjectId 包含非十六进制字符的

  • 允许 unicode 的实例 ObjectId 初始化

版本1.2中的更改#

  • spec parameter for remove() is now optional to allow for deleting all documents in a Collection

  • 始终用 {{query: ...}} 即使没有特殊选项,也可以避免对名为 query

  • 在客户端强制4MB文档限制

  • 补充 map_reduce() 助手-请参见 example

  • 补充 distinct() 方法对 Cursor 实例以允许distinct with查询

  • 修复 __getitem__() 之后 skip()

  • 允许任何UTF-8字符串进入 BSON 编码器,不仅仅是ASCII子集

  • 补充 generation_time

  • 删除了对旧版的支持 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将特殊类型编码/解码为JSON

  • DEPRECATED pymongo.cursor.Cursor.__len__() 赞成 count() 具有 with_limit_and_skip 设置为 True 由于性能回归

  • 将文档切换到Sphinx

版本1.1中的更改#

  • 补充 __hash__() 对于 DBRefObjectId

  • 大量的 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.16中的更改#

版本0.15.2中的更改#

  • 仅文档更改

版本0.15.1中的更改#

  • 各种性能改进

  • API更改不再需要为指定方向 create_index()ensure_index() 索引单个键时

  • 支持编码 tuple 实例作为 list 实例

版本0.15中的更改#

  • 修复的字符串表示形式 ObjectId 实例

  • 补充 timeout 参数用于 find()

  • 允许范围 reduce 中的函数 group()

版本0.14.2中的更改#

  • 小错误修复

版本0.14.1中的更改#

  • seek()tell() for(读取模式) GridFile 实例

版本0.14中的更改#

版本0.13中的更改#

  • 更好的 MasterSlaveConnection 支持

  • API变更 insert()save() 两个回路都已插入 _id

  • 不推荐将索引名称传递给 hint()

版本0.12中的更改#

版本0.11.3中的更改#

  • 字符串编码器中不允许空字节

  • Python2.3的修复

版本0.11.2中的更改#

  • 政治公众人物8

  • 的更新 group()

  • VS构建

版本0.11.1中的更改#

  • 修复了python2.5下的连接池

版本0.11中的更改#

  • 更好的构建失败检测

  • 在子文档中选择字段的驱动程序支持

  • 不允许插入无效的键名

  • 补充 timeout 参数用于 Connection()

版本0.10.3中的更改#

  • 修复大错误 limit()

  • 当模块从C扩展下面重新加载时,最好的例外情况

  • 调用 CollectionDatabase 实例

版本0.10.2中的更改#

  • 支持的子类 dict in C编码器

版本0.10.1中的更改#

  • 别名 Connection 作为 pymongo.Connection

  • 在编码器中引发异常而不是静默溢出

版本0.10中的更改#

  • 补充 ensure_index()

版本0.9.7中的更改#

  • 允许的子集合 $cmd 作为有效的 Collection 姓名

  • 将版本添加为 pymongo.version

  • 添加 --no_ext 命令行选项 setup.py