文档菜单
文档首页
/
MongoDB 手册
/ /

视图

本页内容

  • 应用场景
  • 创建和管理视图
  • 与按需物化视图的比较
  • 行为
  • 访问控制

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

MongoDB 不会将视图内容持久化到磁盘。视图的内容在客户端查询视图时按需计算。

注意

鉴别

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

了解视图类型之间的差异,请参阅与按需物化视图的比较.

您可以使用视图来

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

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

  • 标准视图在读取视图时进行计算,并且不会存储到磁盘。

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

    注意

    当使用$merge时,可以使用$merge来监视物化视图上的更改。当使用$out时,无法监视物化视图上的更改。

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

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

由于它们是从磁盘读取的,而不是作为查询的一部分进行计算,按需物化视图比标准视图提供更好的读取性能。这种性能优势随着管道复杂性和聚合数据大小而增加。

以下各节描述了特定于视图的行为。

视图是只读的。视图上的写操作将返回错误。

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

视图的底层聚合管道受100兆字节内存限制,适用于阻塞排序和阻塞分组操作。

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

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

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

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

注意

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

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

  • 时间序列集合 是可写的不物化视图。视图的限制也适用于时间序列集合。更多信息,请参阅 时间序列集合限制。

  • 您不能从一个时间序列桶集合命名空间(即以 system.buckets 前缀的集合)创建视图。

警告

请勿尝试使用名称 system.profile 创建时间序列集合或视图。如果您尝试这样做,MongoDB 6.3 及更高版本将返回一个 IllegalOperation 错误。 早期版本的 MongoDB 会崩溃。

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

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

    • 创建新视图的源集合或视图。

    • 视图管道 中引用的任何集合或视图。

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

数据库中具有内置 readWrite 角色的用户具有运行所列操作的必要权限。为了授予必要权限,可以选择以下操作:

返回

数据库与集合