视图
MongoDB 视图是只读可查询对象,其内容由其他集合或视图上的聚合管道定义。
MongoDB 不会在磁盘保存视图内容。视图内容将在客户端查询视图时按需计算得出。
您可以在用户界面中为 MongoDB Atlas 托管的部署创建物化视图。
用例
您可以使用视图执行以下操作:
创建有关员工数据集合的视图以排除所有个人身份信息 (PII)。您的应用程序可以查询此视图中不包含任何 PII 的员工数据。
创建有关传感器数据集合的视图,以添加计算的字段和指标。您的应用程序可以使用
find operations
来查询计算数据。创建一个视图,该视图连接两个包含库存和订单历史记录的集合。您的应用程序可以查询该视图,而无需管理或了解基础管道。
创建和管理视图
要了解如何创建和管理视图,请参阅以下资源:
与按需物化视图的对比
MongoDB 提供两种不同的视图类型:标准视图和按需物化视图。这两种视图类型都可以返回聚合管道的结果。
索引
标准视图使用底层集合的索引。因此,您无法直接在标准视图上创建、删除或重新构建索引,也无法获取视图上的索引列表。
您可以直接在按需物化视图上创建索引,因为它们存储在磁盘中。
性能
按需物化视图的读取性能要优于标准视图,因为前者是从磁盘中读取,而不是作为查询的一部分通过计算得出。聚合管道越复杂,要聚合的数据量越大,这种性能优势就越明显。
行为
以下各部分介绍了特定于视图的行为。
只读
视图为只读。对视图进行写入操作会返回错误。
快照隔离
视图不维护集合更改的时间戳,也不支持时间点或快照读取隔离。
视图管道
在执行阻塞排序和阻塞分组操作时,视图的基础聚合管道的内存限制为 100 MB 。
从 MongoDB 6开始。 0 ,需要超过100 MB 内存才能执行的管道阶段,默认会将临时文件写入磁盘。这些临时文件在管道执行期间持续存在,可能会影响实例上的存储空间。在 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 版本会因此崩溃。
访问控制
如果此部署强制执行身份验证,db.createView()
则会要求经过身份验证的用户对该数据库具有 createCollection
特权。
但是,如果用户在数据库上具有 createCollection
权限,并在要创建的视图上具有 find
权限,则则该用户还须具有以下额外权限:
在数据库中具有 readWrite
内置角色的用户具有特权,可以运行列出的操作。创建具有所需角色的用户或将该角色授予现有用户