文档菜单
文档首页
/ / /
Node.js 驱动
/ /

指定在副本集上运行CRUD操作的方式

本页内容

  • 概述
  • 写关注
  • 示例:设置单个写入操作的写关注
  • 示例:检索并应用现有写关注
  • 读关注
  • 示例:设置聚合的读关注级别
  • 示例:更改数据库的读关注
  • 读偏好
  • 示例:设置事务的读偏好和关注
  • 示例:在连接字符串中设置集群的读偏好
  • API文档

在本指南中,您可以了解如何使用 写关注读关注读偏好 配置来修改 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 (可选)
设置各种选项,包括可以应用于您的读取偏好的hedgemaxStalenessSeconds

此代码设置了事务中操作的读取偏好、读取关注点和写入关注点

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文档

返回

复合操作