

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

# 索引属性：隐藏
<a name="index-property-hidden"></a>

Amazon DocumentDB 支持从 Amazon DocumentDB 8.0.1 开始的`hidden`索引属性。

隐藏的索引对查询计划者不可见，也不能用于支持查询。通过向计划者隐藏索引，您可以评估删除指数的潜在影响，而无需实际删除该指数。如果影响是负面的，则可以取消隐藏索引，而不必重新创建已删除的索引。

所有索引类型都支持该`hidden`属性，包括单字段、复合索引、多键索引、文本、地理空间索引和矢量索引。

## 行为
<a name="index-property-hidden-behavior"></a>

除了隐藏在计划器之外，隐藏索引还得到充分维护和执行。例如：
+ 如果隐藏索引是唯一索引，则该索引仍将其唯一约束应用于文档。
+ 如果隐藏索引是 TTL 索引，则该索引仍会使文档过期。
+ 隐藏的索引包含在`listIndexes`和`db.collection.getIndexes()`结果中。
+ 隐藏索引会在对集合进行写入操作时更新，并继续消耗磁盘空间和内存。因此，它们包含在统计操作中，例如`db.collection.stats()`和`$indexStats`。
+ 隐藏未隐藏的索引或取消隐藏的索引会将其重置。`$indexStats`隐藏已隐藏的索引或取消隐藏已取消隐藏的索引不会重置。`$indexStats`

## 限制
<a name="index-property-hidden-restrictions"></a>
+ 您无法隐藏`_id`索引。
+ 您不能使用`cursor.hint()`来强制使用隐藏索引。
+ `$merge`如果隐藏了`on`字段上所需的唯一索引，则失败。运行前将索引设为可见`$merge`。

## 示例
<a name="index-property-hidden-examples"></a>

### 创建隐藏索引
<a name="index-property-hidden-create"></a>

要在隐藏状态下创建索引，请使用`db.collection.createIndex()`方法并在索引定义`true`中将`hidden`选项设置为。

例如，以下操作在`productId`字段上创建隐藏的升序索引：

```
db.collection.createIndex(
  { "productId": 1 },
  { "name": "productId_1", "hidden": true }
)
```

要进行验证，请在集合`listIndexes`上运行`db.collection.getIndexes()`或。隐藏索引的定义`"hidden": true`中包括。

```
db.collection.getIndexes()
[
  {
    "v": 4,
    "key": { "_id": 1 },
    "name": "_id_"
  },
  {
    "v": 4,
    "key": { "productId": 1 },
    "name": "productId_1",
    "hidden": true
  }
]
```

仅当值`hidden`为时才返回索引选项`true`。

### 隐藏现有索引
<a name="index-property-hidden-hide"></a>

使用该`collMod`命令隐藏现有索引。按其`name`或按其标识索引`keyPattern`，然后设置`hidden`为`true`。

以下示例按名称隐藏索引。

```
db.runCommand({
  collMod: "collection",
  index: {
    name: "productId_1", // Specify the index name
    hidden: true
  }
})
```

您还可以通过索引的键模式来识别索引。

```
db.runCommand({
  collMod: "collection",
  index: {
    keyPattern: { productId: 1 }, // Specify the index key specification document
    hidden: true
  }
})
```

### 取消隐藏现有索引
<a name="index-property-hidden-unhide"></a>

要使隐藏索引再次可见，请使用`hidden`设置为的`collMod`命令`false`。

```
db.runCommand({
  collMod: "collection",
  index: { name: "productId_1", hidden: false }
})
```

由于索引在隐藏状态下是完全维护的，因此索引一旦取消隐藏，就可以立即使用。