您的当前位置:首页正文

MongoDB视图

2024-11-07 来源:个人技术集锦


MongoDB的视图,是一个只读的可查询对象。视图中的数据,通过定义在其他集合或视图的集合查询中获得。MongoDB的视图,也分为两种,标准视图(简称视图)和物化视图。其中标准视图,是通查意义上所描述和使用的视图。通过视图中查询的数据,并没有保存到数据库硬盘上,而是在查询时,实时计算得到。而物化视图,查询时数据直接从磁盘中读取。

使用场景

在系统开发应用中,视图有着广泛的使用场景

  • 为了隐藏部分敏感信息,创建一个没有个人识别信息的雇员数据集,共应用和开发人员查询使用。
  • 对数据库中的字段进行计算,创建一个带有计算字段和指标的传感器数据集。
  • 为了方便统计和查询记录,创建一个带有库存和订单历史的视图。

除了以上的典型应用场景外,视图还有很多应用场景,为开发和应用提供各种各样的便利。

两种视图

文本开头介绍了两种视图,标准视图和物化视图,两种视图上有些相同和差异。用户在系统开发过程中,可以继续实际业务需要,选择两种不同的视图。

  • 两种视图,都是通过集合查询aggregation返回结果
  • 标准视图查询时,实时得到计算结果,不会保存到硬盘。查询时可以拿到最近更新的数据,无需考虑磁盘中数据的更新。
  • 物化视图存储在硬盘,aggregation管道中包含$merge或$out方法。使用物化视图时,需要考虑数据更新,可能无法拿到最近更新的数据。
  • 标准视图查询时依赖于集合的索引,不可以创建新的索引。而系统开发人员可以为物化视图添加索引来提高查询效率。
  • 物化视图从磁盘直接读取,无需实时计算,因此性能上往往由于标准视图。

视图行为

  • 视图时只读的,MongoDB不允许向视图中插入数据,向视图中插入数据时,mongodb会报错。
db.placesView.insertOne({ _id: 1, category: "café" })
WriteError({
	"index" : 0,
	"code" : 166,
	"errmsg" : "Namespace test.placesView is a view, not a collection",
	"op" : {
		"_id" : 1,
		"category" : "café"
	}
})
  • 视图中,使用集合操作aggregation中的排序管道时,限制使用100M数据库内存,超过100M内存时,需要使用{allowDiskUsage:true}。查询视图的语句中定义allowDiskUsage参数时,会覆盖视图中定义的allowDiskUse参数。
  • 视图依赖的集合是分片集合时,视图也是分片的。不能使用$lookup, $graphLookup操作获取分片视图
  • 时序集合的标准视图是可写的。mongodb允许向时序集合的标准视图插入数据。

视图权限

  • 创建视图时,用户需要拥有createCollection权限。同时用户需要具备查询视图所依赖集合的查询权限。

视图操作

Mongodb支持对视图的创建,查询,修改和删除操作。基于篇幅的限制,本文暂不介绍,请参考订阅其他文章。

显示全文