配置增删改查操作
Overview
在本指南中,您可以学习;了解如何在PyMongo中配置读取和写入操作。
读取和写入设置
您可以通过设置读取偏好来控制驱动程序路由读取操作的方式。 您还可以通过设置读关注和写关注来控制驱动程序如何等待副本集上读写操作确认的选项。
默认下,数据库从 MongoClient
实例继承这些设置,集合从数据库继承这些设置。但是,您可以使用以下方法之一更改数据库或集合的这些设置:
get_database()
:获取数据库并应用客户端的读取偏好、读关注和写入偏好。database.with_options()
:获取数据库并应用其当前的读取偏好、读关注和写入偏好。get_collection()
:获取集合并应用其当前的读取偏好、读关注和写入偏好。collection.with_options()
:获取集合并应用数据库的读取偏好、读关注和写入偏好。
若要使用上述方法更改读取或写入设置,请调用该方法并传入集合或数据库名称以及新的读取偏好、读关注或写入偏好。
以下示例展示了如何使用get_database()
方法更改名为test-database
的数据库的读取偏好、读关注和写入偏好:
client.get_database("test-database", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
以下示例展示了如何使用get_collection()
方法更改名为test-collection
的集合的读取和写入设置:
database.get_collection("test-collection", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
以下示例展示了如何使用with_options()
方法更改名为test-collection
的集合的读取和写入设置:
collection.with_options(read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
提示
要查看 ReadPreference
枚举中可用的读取偏好类型,请参阅 API文档。
要了解有关读取和写入设置的更多信息,请参阅 MongoDB Server 手册中的以下指南:
标签集
在 MongoDB Server 中,您可以根据您选择的任何条件将键值标签应用于副本集成员。 然后,您可以使用这些标签来定位一个或多个成员以执行读取操作。
默认情况下,PyMongo 在选择要读取的成员时会忽略标签。 要指示 PyMongo 优先选择某些标签,请将它们作为参数传递给 读取偏好类 构造函数。
在以下代码示例中,传递给read_preference
参数的标签集指示 PyMongo 优先从纽约数据中心 ( 'dc': 'ny'
) 读取数据,并回退到旧金山数据中心 ( 'dc': 'sf'
):
db = client.get_database( 'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))
LocalThreshold
如果多个副本集成员与您指定的读取偏好和标签集匹配,PyMongo 将从根据其 ping 时间选择的最近的副本集成员中读取。
默认情况下,驱动程序仅使用 ping 时间与最近节点的 ping 时间在15毫秒以内的节点进行查询。 要在延迟较高的成员之间分配读取,请将localThresholdMS
选项传递给MongoClient()
构造函数。
以下示例指定了 35 毫秒的本地阈值。选择 Synchronous 或 Asynchronous标签页以查看相应的代码:
client = MongoClient(replicaSet='repl0', readPreference=ReadPreference.SECONDARY_PREFERRED, localThresholdMS=35)
client = AsyncMongoClient(replicaSet='repl0', readPreference=ReadPreference.SECONDARY_PREFERRED, localThresholdMS=35)
在前面的示例中,PyMongo 在最近成员的 ping 时间的35毫秒内在匹配成员之间分配读取。
注意
通过mongos
实例与副本集通信时,PyMongo 会忽略localThresholdMS
的值。 在这种情况下,请使用localThreshold命令行选项。
可重试读取和写入
如果某些写入操作由于网络或服务器错误而失败, PyMongo会自动重试一次。
您可以通过在 MongoClient()
构造函数中将 retryReads
或 retryWrites
选项设置为 False
来显式禁用可重试读取或可重试写入。以下示例禁用客户端的可重试读取和写入。选择Synchronous或Asynchronous标签页以查看相应的代码:
client = MongoClient("<connection string>", retryReads=False, retryWrites=False)
client = AsyncMongoClient("<connection string>", retryReads=False, retryWrites=False)
要学习;了解有关支持的可重试读取操作的更多信息,请参阅MongoDB Server手册中的可重试读取。要学习;了解有关支持的可重试写入操作的更多信息,请参阅MongoDB Server手册中的可重试写入。
排序规则
创建集合时,可以为对该集合执行的所有操作指定默认默认规则。
排序规则是一设立特定于语言的字符串比较规则,例如字母大小写和重音符号规则。
要指定排序规则,请创建 Collation
类或 Python 字典的实例。有关要传递给 Collation
构造函数或作为键包含在字典中的选项列表,请参阅 MongoDB Server 手册中的排序规则。
提示
导入排序规则
要创建 Collation
类的实例,必须从 pymongo.collation
导入。
以下示例创建与上一示例相同的集合,但默认默认规则为 fr_CA
。选择Synchronous或Asynchronous标签页以查看相应的代码:
from pymongo.collation import Collation database = client["test_database"] database.create_collection("example_collection", collation=Collation(locale='fr_CA'))
from pymongo.collation import Collation database = client["test_database"] await database.create_collection("example_collection", collation=Collation(locale='fr_CA'))