Views
3.4 版的新功能。
在本页面
从 3.4 版开始,MongoDB 添加了对从现有集合或其他视图创建只读视图的支持。
Create View
为了创建或定义视图,MongoDB 3.4 引入了:
- 现有create命令(和db.createCollection帮助器)的
viewOn
和pipeline
选项:
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )
或者为视图指定默认的collation:
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
- 一个新的mongo shell 助手db.createView():
db.createView(<view>, <source>, <pipeline>, <collation> )
Note
您必须在与源集合相同的数据库中创建视图。
Behavior
视图表现出以下行为:
Read Only
视图是只读的;对视图的写操作将出错。
以下读取操作可以支持视图:
索引使用和排序操作
-
视图使用基础集合的索引。
-
由于索引位于基础集合上,因此您无法直接在视图上创建,删除或重建索引,也无法在视图上获取索引列表。
-
您不能在视图上指定$natural排序。
例如,以下操作是* invalid *:
db.view.find().sort({$natural: 1})
Projection Restrictions
视图上的find()操作不支持以下projection运算符:
Immutable Name
您不能重命名views。
View Creation
-
视图是在读取操作期间按需计算的,并且 MongoDB 对视图执行读取操作,这是基础聚合管道的一部分。因此,视图不支持以下操作:
-
如果用于创建视图的聚合管道禁止显示
_id
字段,则视图中的文档将没有_id
字段。
Sharded View
视图和排序规则
-
您可以在创建时为视图指定默认的collation。如果未指定排序规则,则视图的默认排序规则为“简单”二进制比较排序规则。也就是说,视图不会继承集合的默认排序规则。
-
视图上的字符串比较使用视图的默认排序规则。尝试更改或覆盖视图的默认排序规则的操作将失败,并显示错误。
-
如果从另一个视图创建视图,则不能指定与源视图的排序规则不同的排序规则。
-
如果执行涉及多个视图的聚合(例如$lookup或$graphLookup),则这些视图必须具有相同的collation。
公众视野定义
列出集合的操作(例如db.getCollectionInfos()和db.getCollectionNames())在其输出中包括视图。
Important
视图定义是公共的;即视图上的db.getCollectionInfos()和explain
操作将包括定义视图的管道。因此,请避免在视图定义中直接引用敏感字段和值。
删除视图
要删除视图,请在视图上使用db.collection.drop()方法。
修改视图
您可以通过拖放并重新创建视图或使用collMod命令来修改视图。
Supported Operations
以下操作提供了对视图的支持,但本页中提到的限制除外: