

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 複合索引
<a name="indexes-compound"></a>

複合索引會存放文件集合中兩個或多個欄位的資訊，允許查詢第一個欄位或任何字首欄位。這些索引會針對同時篩選多個欄位或結合篩選與排序操作的查詢最佳化效能。它們也適用於最左邊索引欄位上的單一條件查詢。資料庫會利用這些索引項目，有效率地尋找相符的文件，而無需執行完整的集合掃描。

複合欄位索引在下列情況下是有益的：
+ 您需要同時篩選多個欄位。
+ 您需要結合篩選與排序操作。

## 支援的索引屬性
<a name="indexes-compound-properties"></a>


| 選項 | 3.6 | 4.0 | 5.0 | 8.0 | 彈性叢集 | 
| --- | --- | --- | --- | --- | --- | 
| [name](index-property-name.md) | 是 | 是 | 是 | 是 | 是 | 
| [唯一](index-property-unique.md) | 是 | 是 | 是 | 是 | 是 | 
| [稀疏](index-property-sparse.md) \* | 是 | 是 | 是 | 是 | 是 | 
| [partialFilterExpression](index-property-partialfilterexpression.md) \* | 否 | 否 | 是 | 是 | 否 | 

\* `sparse`和 `partialFilterExpression`選項無法在相同的索引定義中一起使用。如果您嘗試使用這些選項建立索引，它將會失敗，並出現下列錯誤：

```
Error in specification: cannot mix partialFilterExpression and sparse options
```

## 建立複合索引
<a name="indexes-compound-creating"></a>

使用 `createIndex()`方法來建立複合索引。方法語法為： `db.collection.createIndex(<keys>, <options>)`

`keys` 參數是指定欄位和索引排序順序的 JSON 文件：

```
{
  "<field 1>": <1 (ascending)|-1 (descending)>,
  "<field 2>": <1 (ascending)|-1 (descending)>,
  ...
}
```

請注意，複合索引中只能有一個欄位是陣列。如果您嘗試在兩個或多個陣列欄位上建立複合索引，則會失敗，並顯示下列錯誤：

```
multiple fields of compound index cannot be arrays
```

`options` 參數是 JSON 文件，可指定索引的選項：

```
{
  "name": "<name>",
  "unique": <true | false>,
  "sparse": <true | false>,
  "partialFilterExpression": <filter expression>
}
```

如需建立複合索引的範例，請參閱[索引屬性](index-properties.md)。