

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在亚马逊 DocumentDB 8.0 中使用视图
<a name="views"></a>
+ 亚马逊 DocumentDB 8.0 现在支持视图。视图充当虚拟集合，根据指定的聚合操作呈现数据。创建视图时，您可以定义一个用于转换来自一个或多个源集合的数据的查询。每次访问视图时，Amazon DocumentDB 8.0 都会执行此查询，而不会消耗额外的存储资源。与标准集合不同，Amazon DocumentDB 8.0 中的视图不将文档存储在磁盘上，因此它们是向应用程序呈现转换后或经过筛选的数据的有效解决方案。要在亚马逊文档数据库中创建视图，你可以使用 createView 命令或 db.createView () 帮助器方法：

  ```
  db.createView("viewName","sourceCollection",
  [
      { $match: { status: "active" } },
      { $project: { _id: 1, name: 1, email: 1 } }
  ]
  )
  ```

  这将创建一个基于 “SourceCollection” 的名为 “ViewName” 的视图，该视图仅包含活动文档和项目，仅包括\$1id、name和电子邮件字段。Amazon DocumentDB 中的视图为只读视图。对视图进行写入操作将返回错误。要在大型数据集中获得最佳性能，您可以构建视图管道以最大限度地提高效率。对于复杂的聚合管道，建议使用 \$1match 阶段作为管道的第一阶段或早期阶段，以减少后续阶段需要处理的文档数量，从而提高查询性能。

## 最佳实践
<a name="views-bestpractices"></a>

下面列出了视图应遵循的一些最佳实践。
+ 尽早过滤：在视图管道中尽早使用 \$1match 阶段来减少处理的数据量。
+ 避免复杂聚合：对于经常访问且具有复杂聚合的视图，请考虑使用预先计算的结果创建一个单独的集合，并定期更新。
+ 索引规划：确保视图管道中使用的字段，尤其是在 \$1match 和 \$1sort 操作中使用的字段，已在源集合上正确编制索引。
+ 查询优化：使用 explain 命令来了解视图查询是如何执行的，并进行相应的优化。
+ 视图的替代方案：鉴于 Amazon DocumentDB 和 MongoDB 视图之间的功能差异，在遇到限制时，可以考虑使用带有计划更新的常规集合作为视图的替代方案。

## 聚合器运算符兼容性
<a name="views-aggregators"></a>

Amazon DocumentDB 在视图定义中支持许多聚合运算符，同时继续扩展兼容性。使用视图时，请重点关注以下支持的运算符：
+ \$1match 用于筛选文档
+ \$1project 用于字段选择和转换
+ \$1addFields 用于添加计算字段
+ \$1sort 用于对结果进行排序
+ \$1limit 和 \$1skip 用于分页

一些专门的运算符，例如 \$1currenTop、\$1replaceRoot 和 \$1geoNear，目前在直接聚合查询中工作，而不是视图定义。

## 利用索引和视图
<a name="views-indexes"></a>

Amazon DocumentDB 8.0 中的视图使用基础集合的索引。因此，您无法直接在视图上创建、删除或重建索引。但是，在源集合上精心设计的索引可以显著提高视图查询性能。以下是一些优化视图查询性能的步骤：
+ 确保视图管道中使用的源集合字段上存在适当的索引，尤其是在\$1match和\$1sort操作中
+ 使用 explain () 方法分析查询执行计划并验证索引使用情况。例如，`db.viewName.find({...}).explain() `