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