视图
MongoDB 视图是一个只读的可查询对象,其内容由其他集合或视图上的 聚合管道定义。
MongoDB 不会在磁盘保存视图内容。视图内容将在客户端查询视图时按需计算得出。
您可以在用户界面中为 MongoDB Atlas 托管的部署创建物化视图。
用例
您可以使用视图执行以下操作:
创建有关员工数据集合的视图以排除所有个人身份信息 (PII)。您的应用程序可以查询此视图中不包含任何 PII 的员工数据。
创建有关传感器数据集合的视图,以添加计算的字段和指标。您的应用程序可以使用
find operations
来查询计算数据。创建一个视图,该视图连接两个包含库存和订单历史记录的集合。您的应用程序可以查询该视图,而无需管理或了解基础管道。
创建和管理视图
要了解如何创建和管理视图,请参阅以下资源:
与按需物化视图的对比
MongoDB 提供两种不同的视图类型:标准视图和按需物化视图。这两种视图类型都可以返回聚合管道的结果。
索引
标准视图使用底层集合的索引。因此,您无法直接在标准视图上创建、删除或重新构建索引,也无法获取视图上的索引列表。
您可以直接在按需物化视图上创建索引,因为它们存储在磁盘中。
性能
按需物化视图的读取性能要优于标准视图,因为前者是从磁盘中读取,而不是作为查询的一部分通过计算得出。聚合管道越复杂,要聚合的数据量越大,这种性能优势就越明显。
行为
以下各部分介绍了特定于视图的行为。
只读
视图为只读。对视图进行写入操作会返回错误。
快照隔离
视图不维护集合更改的时间戳,也不支持时间点或快照读取隔离。
视图管道
在执行阻塞排序和阻塞分组操作时,视图的基础聚合管道的内存限制为 100 MB 。
从 MongoDB 6.0 开始,需要 100 兆字节以上内存容量的管道阶段默认将临时文件写入磁盘。这些临时文件在管道执行期间持续存在,并且可能影响实例上的存储空间。在 MongoDB 的早期版本中,您必须将 { allowDiskUse: true }
传递给单个 find
和 aggregate
命令才能启用此行为。
单个 find
和 aggregate
命令可以通过以下任一方式覆盖 allowDiskUseByDefault
参数:
使用
{ allowDiskUse: true }
以允许在allowDiskUseByDefault
设置为false
时将临时文件写入磁盘使用
{ allowDiskUse: false }
以禁止在allowDiskUseByDefault
设置为true
时将临时文件写入磁盘
注意
对于MongoDB Atlas,建议配置存储自动伸缩,以防止长时间运行的查询用临时文件填满存储。
如果您的Atlas 集群使用存储自动伸缩,则临时文件可能会导致集群扩展到下一个存储层级。
时间序列集合
时间序列集合是可写非物化视图。视图限制适用于时间序列集合。
有关详细信息,请参阅时间序列集合限制。
警告
请勿尝试创建名称为system.profile
的时间序列集合或视图,否则 MongoDB Server 会崩溃。
访问控制
如果部署强制执行身份验证:
要创建视图,您必须对创建视图的数据库具有
createCollection
权限。此外,如果您对要创建的视图的命名空间拥有find
权限,则还必须对以下资源拥有find
权限:从中创建新视图的源集合或视图。
要查询视图,您必须拥有视图命名空间的
find
权限。您不需要对视图管道中引用的源集合或任何命名空间具有find
权限。
对数据库具有内置readWrite
角色的用户拥有运行所列操作所需的特权。要授予所需权限,请执行以下任一操作:
创建具有所需角色的用户。