Docs 菜单
Docs 主页
/ / /
Node.js 驱动程序
/ /

复合运算符

在此页面上

  • Overview
  • 内置方法

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

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

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

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

  • FindOneAndDelete()

  • FindOneAndUpdate()

  • FindOneAndReplace()

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

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

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

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

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

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

{ _id: 1, x: "on" }

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

选项值
语法和输出

默认: false

匹配的文档

await coll.findOneAndDelete({ x: "on" });
{ _id: 1, x: 'on' }

没有匹配的文档

await coll.findOneAndDelete({ x: "off" });
null

true

await coll.findOneAndDelete({ x: "on" }, { includeResultMetadata: true });
{ lastErrorObject: { n: 1 }, value: { _id: 1, x: 'on' }, ok: 1, ... }

后退

查询

在此页面上