ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs 菜单

视图

MongoDB 视图是一个只读可查询对象,其内容由其他集合或视图上的 聚合管道定义。

MongoDB 不会在磁盘保存视图内容。视图内容将在客户端查询视图时按需计算得出。

注意

消歧

本页讨论标准视图。有关按需物化视图的讨论,请参阅按需物化视图。

要了解视图类型之间的区别,请参阅与按需物化视图的比较

您可以在用户界面中为 MongoDB Atlas 托管的部署创建物化视图。

您可以使用视图执行以下操作:

  • 创建有关员工数据集合的视图以排除所有个人身份信息 (PII)。您的应用程序可以查询此视图中不包含任何 PII 的员工数据。

  • 创建有关传感器数据集合的视图以添加计算出的字段和指标。您的应用程序可以使用 find operations 来查询计算出的数据。

  • 创建一个视图,该视图连接两个包含库存和订单历史记录的集合。您的应用程序可以查询该视图,而无需管理或了解基础管道。

要了解如何创建和管理视图,请参阅以下资源:

MongoDB 提供两种不同的视图类型:标准视图按需物化视图。这两种视图类型都可以返回聚合管道的结果。

  • 标准视图在您读取视图时计算得出,并且不会在磁盘中存储。

  • 按需物化视图存储在磁盘上并从磁盘读取。它们使用$merge$out阶段更新保存的数据。

标准视图使用底层集合的索引。因此,您无法直接在标准视图上创建、删除或重新构建索引,也无法获取视图上的索引列表。

您可以直接在按需物化视图上创建索引,因为它们存储在磁盘中。

按需物化视图的读取性能要优于标准视图,因为前者是从磁盘中读取,而不是作为查询的一部分通过计算得出。聚合管道越复杂,要聚合的数据量越大,这种性能优势就越明显。

以下各部分介绍了特定于视图的行为。

视图为只读。对视图进行写入操作会返回错误。

视图不维护集合更改的时间戳,也不支持时间点或快照读取隔离。

在执行阻塞排序和阻塞分组操作时,视图的基础聚合管道的内存限制为 100 MB 。

从 MongoDB 6.0 开始,需要 100 兆字节以上内存容量的管道阶段默认将临时文件写入磁盘。这些临时文件在管道执行期间持续存在,并且可能影响实例上的存储空间。在 MongoDB 的早期版本中,您必须将 { allowDiskUse: true } 传递给单个 findaggregate 命令才能启用此行为。

单个 findaggregate 命令可以通过以下任一方式覆盖 allowDiskUseByDefault 参数:

  • 使用 { allowDiskUse: true } 以允许在 allowDiskUseByDefault 设置为 false 时将临时文件写入磁盘

  • 使用 { allowDiskUse: false } 以禁止在 allowDiskUseByDefault 设置为 true 时将临时文件写入磁盘

注意

对于MongoDB Atlas,建议配置存储自动伸缩,以防止长时间运行的查询用临时文件填满存储。

如果您的Atlas 集群使用存储自动伸缩,则临时文件可能会导致集群扩展到下一个存储层级。

时间序列集合是可写非物化视图。视图限制适用于时间序列集合。

有关详细信息,请参阅时间序列集合限制

警告

请勿尝试创建名称为system.profile的时间序列集合或视图,否则 MongoDB Server 会崩溃。

如果部署强制执行身份验证:

  • 要创建视图,您必须对创建视图的数据库具有createCollection 权限。此外,如果您对要创建的视图的命名空间拥有find 权限,则还必须对以下资源拥有find 权限:

  • 要查询视图,您必须拥有视图命名空间的 find权限。您不需要对视图管道中引用的源集合或任何命名空间具有 find权限。

readWrite对数据库具有内置 角色的用户拥有运行所列操作所需的特权。要授予所需权限,请执行以下任一操作: