Docs 菜单
Docs 主页
/ / /
Node.js
/ /

复合运算符

在此页面上

  • Overview
  • 内置方法

大多数数据库请求要么从数据库读取数据,要么将数据写入数据库。 但是,在某些实例下,您可能需要单个操作来读取和写入数据。

复合操作将读取和写入操作组合在单个原子声明中,因此在读取和后续写入之间不会发生数据更改。

如果单独执行每个操作,则另一个请求可能会在读取和写入操作之间更改数据。 这些数据更改可能不会阻止操作成功,但可能会使错误处理更加困难。 当您的应用程序必须在流程的任何阶段处理潜在错误时,它可能会变得脆弱且难以测试。

Node.js 驱动程序提供以下方法来执行复合操作:

这些方法接受一个可选的 options对象,该对象具有可配置的排序投影选项。

您还可以设置 includeResultMetadata 选项来指定每种方法的返回类型。要了解该选项的更多信息,请参阅本指南的 includeResultMetadata 选项部分。

findOneAndUpdate()findOneAndDelete()方法采用returnDocument设置,该设置指定该方法是返回已修改帖子的更新前版本还是更新后版本。

includeResultMetadata选项确定复合方法的返回类型。

此设置默认为true ,这意味着每个方法都会返回一个ModifyResult类型,其中包含找到的文档和其他元数据。 如果设立includeResultMetadata设置为false ,该方法将返回匹配的文档。 如果没有匹配的文档,则每个方法都返回null

假设集合仅包含以下文档:

{ _id: 1, x: "on" }

下表显示了includeResultMetadata选项的值如何更改findOneAndDelete()方法的返回类型:

选项值
语法和输出
默认: true
await coll.findOneAndDelete({ x: "on" });
false

匹配的文档

await coll.findOneAndDelete({ x: "on" }, { includeResultMetadata: false });

没有匹配的文档

await coll.findOneAndDelete({ x: "off" }, { includeResultMetadata: false });

后退

指定查询

在此页面上