指定在副本集上运行CRUD操作的方式
本页内容
概述
在本指南中,您可以了解如何使用 写关注、读关注 和 读偏好 配置来修改 MongoDB 在副本集上运行创建、读取、更新和删除 (CRUD) 操作的方式。
您可以在以下级别设置写关注、读关注和读偏好选项
客户端,设置所有操作执行的 默认值,除非被覆盖
会话
事务
数据库
集合
此列表还表示选项设置优先级的递增顺序。例如,如果您为事务设置了读关注级别,它将覆盖客户端设置的读关注级别。
这些选项允许您自定义副本集中数据的事务一致性和可用性。
写关注
写关注指定了在操作成功返回之前,MongoDB 需要请求的确认级别,例如插入或更新操作。未指定显式写关注的操作将继承全局默认写关注设置。
更多信息,请参阅写入关注在服务器手册中。有关详细的API文档,请参阅写入关注API文档。
以下表格描述了以下内容:WriteConcern
参数
参数 | 类型 | 描述 |
---|---|---|
w (可选) | 请求确认写入操作已传播到指定的 mongod 实例或已标记为指定标签的mongod 实例 | |
wtimeoutMS (可选) | 数字 | 指定一个时间限制,以防止写入操作无限期阻塞 |
journal (可选) | 布尔值 | 请求确认写入操作已写入磁盘日志 |
示例:设置单个写入操作的写入关注
此代码在创建新文档时使用自定义WriteConcern
设置
myDB.myCollection.insertOne( { name: "anotherDocumentName" }, { writeConcern: { w: 2, wtimeoutMS: 5000 } } );
示例:检索并应用现有的写关注
此代码使用 fromOptions()
方法从现有数据库引用 myDB
的选项中构建一个 WriteConcern
。请注意,myDB
可以替换为任何接受写关注选项的实体引用。然后,将新的写关注应用于文档 myDoc
。
const newWriteConcern = WriteConcern.fromOptions(myDB); const myDoc = { name: "New Document" }; WriteConcern.apply(myDoc,newWriteConcern);
读关注
读关注指定以下行为
副本集之间的因果一致性级别
您可以通过使用 level
参数来指定读关注设置。默认读关注级别是 local
。这意味着客户端返回的数据来自客户端连接的副本集成员,不保证数据已写入所有副本集成员。请注意,较低的读关注级别要求可能会降低延迟。
有关读取关注点或读取关注级别的更多信息,请参阅服务器手册中的读取关注点。有关ReadConcern
类型和读取关注级别定义的更多详细信息,请参阅API文档中的读取关注点。
示例:设置聚合的读取关注级别
此代码将聚合的读取关注级别设置为"majority"
const pipeline = [ {"$match": { category: "KITCHENWARE", }}, {"$unset": [ "_id", "category", ]} ]; result = await myDB.collection("mycollection") .aggregate( pipeline, { readConcern: { level: "available" } } );
有关聚合的更多信息,请参阅聚合页面。
示例:更改数据库的读取关注级别
此代码将数据库的读取关注级别更改为"local"
const options = { readConcern: { level: "local" } }; const myDB = client.db("mydb", options);
读取偏好
读取偏好决定了MongoDB在运行查询时从副本集的哪个成员读取。您还可以自定义服务器如何评估成员。
有关更详细的API文档,请参阅读取偏好API文档。
以下表格描述了ReadPreference
参数
参数 | 类型 | 描述 |
---|---|---|
模式 | 指定服务器从哪个副本集成员读取的要求或偏好。默认模式 primary 指定操作从副本集的主要成员读取。 | |
tags (可选) | 将标签分配给次要副本集成员,以自定义服务器如何评估它们。标签不能与 primary 读取偏好模式设置一起使用。 | |
options (可选) | 设置各种选项,包括可以应用于您的读取偏好的hedge和maxStalenessSeconds。 |
示例:设置事务的读取偏好和关注点
此代码设置了事务中操作的读取偏好、读取关注点和写入关注点
const transactionOptions = { readPreference: "primary", readConcern: { level: "local" }, writeConcern: { w: "majority" }, }; const session = client.startSession(); session.startTransaction(transactionOptions); // ... await session.commitTransaction(); await session.endSession();
有关事务的更多信息,请参阅事务。
示例:在连接字符串中设置集群的读取偏好
此代码示例创建了一个MongoClient,在查询集群时使用“secondary”读取偏好模式。
const uri = "mongodb+srv://<user>:<password>@<cluster-url>?readPreference=secondary&maxStalenessSeconds=120"; const client = new MongoClient(uri);
此示例还设置了maxStalenessSeconds
选项。有关连接字符串选项的更多信息,请参阅手册中的连接字符串选项部分。
API 文档
有关本指南中提到的方法和类型,请参阅以下API文档