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

视图是只读的;对视图的写操作将出错。

以下读取操作可以支持视图:

索引使用和排序操作

例如,以下操作是* invalid *:

db.view.find().sort({$natural: 1})

Projection Restrictions

视图上的find()操作不支持以下projection运算符:

Immutable Name

您不能重命名views

View Creation

Sharded View

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

视图和排序规则

公众视野定义

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

Important

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

删除视图

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

修改视图

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

Supported Operations

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

Commands Methods
create db.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()
首页