Views

3.4 版的新功能。

在本页面

从 3.4 版开始,MongoDB 添加了对从现有集合或其他视图创建只读视图的支持。

Create View

为了创建或定义视图,MongoDB 3.4 引入了:

db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )

或者为视图指定默认的collation

db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
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 对视图执行读取操作,这是基础聚合管道的一部分。因此,视图不支持以下操作:

  • db.collection.mapReduce(),

    • $text运算符,因为$text聚合运算仅对第一阶段有效,

    • geoNear命令和$geoNear流水线阶段。

  • 如果用于创建视图的聚合管道禁止显示_id字段,则视图中的文档将没有_id字段。

Sharded View

如果视图的基础集合被分片,则认为它们是分片的。因此,您无法在$lookup$graphLookup操作中为from字段指定分片视图。

视图和排序规则

  • 您可以在创建时为视图指定默认的collation。如果未指定排序规则,则视图的默认排序规则为“简单”二进制比较排序规则。也就是说,视图不会继承集合的默认排序规则。

  • 视图上的字符串比较使用视图的默认排序规则。尝试更改或覆盖视图的默认排序规则的操作将失败,并显示错误。

  • 如果从另一个视图创建视图,则不能指定与源视图的排序规则不同的排序规则。

  • 如果执行涉及多个视图的聚合(例如$lookup$graphLookup),则这些视图必须具有相同的collation

公众视野定义

列出集合的操作(例如db.getCollectionInfos()db.getCollectionNames())在其输出中包括视图。

Important

视图定义是公共的;即视图上的db.getCollectionInfos()explain操作将包括定义视图的管道。因此,请避免在视图定义中直接引用敏感字段和值。

删除视图

要删除视图,请在视图上使用db.collection.drop()方法。

修改视图

您可以通过拖放并重新创建视图或使用collMod命令来修改视图。

Supported Operations

以下操作提供了对视图的支持,但本页中提到的限制除外:

CommandsMethods
createdb.createCollection()

db.createView()
collMod
db.getCollection()
db.getCollectionInfos()
db.getCollectionNames()
find
distinct
count
db.collection.aggregate()
db.collection.find()
db.collection.findOne()
db.collection.count()
db.collection.distinct()