Docs 菜单

Docs 主页开发应用程序MongoDB Manual

视图

在此页面上

  • 用例
  • 创建和管理视图
  • 与按需物化视图的对比
  • 行为
  • 访问控制

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

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

注意

消歧

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

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

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

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

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

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

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

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

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

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

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

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

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

从 MongoDB 6.0 开始,需要 100 MB 以上内存容量的管道阶段默认将临时文件写入磁盘。在 MongoDB 的早期版本中,您必须将 { allowDiskUse: true } 传递给单个 findaggregate 命令才能启用此行为。

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

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

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

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

  • 您无法从时间序列存储桶集合命名空间(即前缀为 system.buckets 的集合)创建视图。

警告

不要尝试创建名称为 system.profile 的时间序列集合或视图。如果您尝试这样做,MongoDB 6.3 及更高版本会返回 IllegalOperation 错误。早期 MongoDB 版本会因此崩溃。

如果此部署强制执行身份验证db.createView() 则会要求经过身份验证的用户对该数据库具有 createCollection 特权。

但是,如果用户在数据库上具有 createCollection 权限,并在要创建的视图上具有 find 权限,则则该用户须具有以下额外权限:

  • find 源集合或视图上。

  • find位于pipeline中引用的任何其他集合或视图(如有)。

在数据库中具有 readWrite 内置角色的用户具有特权,可以运行列出的操作。创建具有所需角色的用户将该角色授予现有用户

← 数据库和集合