视图
MongoDB 视图是一个只读的可查询对象,其内容由其他集合或视图上的聚合管道定义。聚合管道。
MongoDB 不会将视图内容持久化到磁盘。视图的内容在客户端查询视图时按需计算。
您可以在UI 中创建物化视图,这些视图托管在 MongoDB Atlas.
应用场景
您可以使用视图来
在员工数据集合上创建视图,以排除任何个人可识别信息(PII)。您的应用程序可以查询视图以获取不包含任何PII.
在传感器数据集合上创建视图,以添加计算字段和指标。您的应用程序可以使用
find operations
来查询计算数据。创建一个连接包含库存和订单历史的两个集合的视图。您的应用程序可以查询视图,而无需管理或了解底层管道。
创建和管理视图
要了解如何创建和管理视图,请参阅以下资源
与按需物化视图的比较
MongoDB提供了两种不同的视图类型:标准视图和按需物化视图。两种视图类型都返回聚合管道的结果。
标准视图在读取视图时进行计算,并且不会存储到磁盘。
按需物化视图存储在磁盘上,并从磁盘读取。它们使用
$merge
或$out
阶段来更新保存的数据。
索引
标准视图使用底层集合的索引。因此,您不能直接在标准视图中创建、删除或重建索引,也不能获取视图上的索引列表。
由于它们存储在磁盘上,可以直接在按需物化视图中创建索引。
性能
由于它们是从磁盘读取的,而不是作为查询的一部分进行计算,按需物化视图比标准视图提供更好的读取性能。这种性能优势随着管道复杂性和聚合数据大小而增加。
行为
以下各节描述了特定于视图的行为。
只读
视图是只读的。视图上的写操作将返回错误。
快照隔离
视图不维护集合更改的时间戳,也不支持点时间或快照读隔离。
视图管道
视图的底层聚合管道受100兆字节内存限制,适用于阻塞排序和阻塞分组操作。
从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 6.3 及更高版本将返回一个 IllegalOperation
错误。 早期版本的 MongoDB 会崩溃。
访问控制
如果部署强制执行 身份验证:
要创建视图,您必须在创建视图的数据库上具有
createCollection
权限。另外,如果您在要创建的视图的命名空间上具有find
权限,您还必须在以下资源上具有find
权限创建新视图的源集合或视图。
在 视图管道 中引用的任何集合或视图。
要查询视图,您必须在视图命名空间上具有
find
权限。您不需要在源集合或视图管道中引用的任何命名空间上具有find
权限。
数据库中具有内置 readWrite
角色的用户具有运行所列操作的必要权限。为了授予必要权限,可以选择以下操作: