MongoDB视图是可查询的对象,其内容由其他集合或视图上的聚合管道定义 。MongoDB不会将视图内容持久化到磁盘上。客户端查询视图时,将按需计算视图的内容。MongoDB可以要求客户端 具有查询视图的权限。MongoDB不支持针对视图的写入操作。
例如,您可以:
exclude
任何私人或个人信息(PII)的集合上创建一个视图
。应用程序可以在视图中查询不包含任何PII的员工数据。add
计算字段和度量。应用程序可以使用简单的查找操作来查询数据。joins
两个集合分别包含库存和订单历史记录。应用程序可以查询联接的数据,而无需管理或了解底层的复杂管道。当客户端查询视图时,MongoDB会将客户端查询追加到基础管道,并将该组合管道的结果返回给客户端。MongoDB可以将 聚合管道优化应用于组合管道。
注意
下页讨论视图。有关按需实例化视图的讨论,请参见按需实例化视图 。
视图表现出以下行为:
视图使用基础集合的索引。
由于索引位于基础集合上,因此您无法直接在视图上创建,删除或重建索引,也无法在视图上获取索引列表。
您不能$natural
在视图上指定排序。
例如,以下操作无效:
db.collection.mapReduce()
,$text
运算符,因为$text
聚合操作仅对第一阶段有效,$geoNear
管线阶段。_id
字段,则视图中的文档将没有该_id
字段。如果视图的基础集合被分片,则认为它们是分片的。因此,您不能from
在$lookup
和$graphLookup
操作中为该字段指定分片视图。
$lookup
或)$graphLookup
,则这些视图必须具有相同的排序规则。列出集合的操作(例如
db.getCollectionInfos()
和)
db.getCollectionNames()
在其输出中包括视图。
重要
视图定义是公共的;即db.getCollectionInfos()
,explain
对视图的操作将包括定义视图的管道。因此,请避免在视图定义中直接引用敏感字段和值。
若要删除视图,请使用视图上的db.collection.drop()
方法。