视图
本节内容
- 创建视图
- 特性
- 删除视图
自3.4版本,MongoDB支持从已存在的集合或视图创建只读的视图
创建视图
在MongoDB3.4中创建或定义一个视图:
viewOn 和 pipeline 选项已经存在于 create 命令中(查看:db.createCollection 帮助)
>db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )
你也可以为视图指定默认的校验规则
>db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
新版本中,mongodb 提供了一个新的 mongo shell 命令 创建视图 db.createView():
>db.createView(<view>, <source>, <pipeline>, <collation> )
特性
视图展现了如下特性:
- 视图是只读的,对视图的写操作是错误的
- 视图能够使用源集合的索引
- 视图考虑了分片如果它们的源集合是分片的。因此,你不能在分片视图的 字段上使用 $lookup 和 $graphLookup 操作符
- .视图是读取操作期间按需进行计算的,同时,对视图执行的读操作也作为底层集合管道的一部分,因此 视图不支持如下的操作
db.collection.mapReduce(),
$text 操作,
geoNear命令 和$geoNear。
- find()操作符,作用在视图上时,不支持如下的字段影射操作
$
$eleMatch
$slice
$meta
- 如果使用聚合管道创建视图并抑制_id 字段,那视图中的文档将没有_id 字段。
- 不能对视图进行重命名。
- 视图上的字符串比较使用视图默认的校对规则,尝试修改或者覆盖视图的默认校对规则的操作是失败的,也是一种错误的操作。
对于集合的操作,如 db.getCollectionInfos() 和db.getCollectionNames() ,在输出中也会包含视图
提示:
视图的定义是公共的,因此db.getCollectionInfos()和 explain 操作 会包含视图中定义的管道信息。因此 避免在视图中定义敏感的字段和值
删除视图
在视图上使用 db.collection.drop() 删除视图。