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