复合运算符
Overview
大多数数据库请求要么从数据库读取数据,要么将数据写入数据库。 但是,在某些实例下,您可能需要单个操作来读取和写入数据。
复合操作将读取和写入操作组合在单个原子声明中,因此在读取和后续写入之间不会发生数据更改。
如果单独执行每个操作,则另一个请求可能会在读取和写入操作之间更改数据。 这些数据更改可能不会阻止操作成功,但可能会使错误处理更加困难。 当应用程序在任何阶段处理潜在错误时,它都可能变得脆弱且难以测试。
内置方法
Node.js 驱动程序提供以下方法来执行复合操作:
这些方法接受一个可选的 options
对象,该对象具有可配置的排序和投影选项。
您还可以设置 includeResultMetadata
选项来指定每种方法的返回类型。要了解该选项的更多信息,请参阅本指南的 includeResultMetadata 选项部分。
findOneAndUpdate()
和findOneAndDelete()
方法采用returnDocument
设置,该设置指定该方法是返回已修改帖子的更新前版本还是更新后版本。
includeResultMetadata 选项
includeResultMetadata
选项确定复合方法的返回类型。
此设置默认为false
,这意味着每个方法都会返回匹配的文档。 如果没有匹配的文档,则每个方法都返回null
。如果将includeResultMetadata
设置为true
,该方法将返回包含找到的文档和元数据的ModifyResult
类型。
假设集合仅包含以下文档:
{ _id: 1, x: "on" }
下表显示了includeResultMetadata
选项的值如何更改findOneAndDelete()
方法的返回类型:
选项值 | 语法和输出 | ||||
---|---|---|---|---|---|
默认: false | 匹配的文档
没有匹配的文档
| ||||
true |
|