Navigation

MongoDB\Collection::createIndex()

Definition

MongoDB\Collection::createIndex

Create an index for the collection.

function createIndex($key, array $options = []): string

This method has the following parameters:

Parameter Type Description
$key array|object

Specifies the field or fields to index and the index order.

For example, the following specifies a descending index on the username field:

[ 'username' => -1 ]
$options array Optional. An array specifying the desired options.

The $options parameter accepts all index options that your MongoDB version supports. MongoDB includes the following options:

Option Type Description
unique boolean Optional. Creates a unique index.
collation array|object

Optional. Specifies the collation for the index.

Collation allows users to specify language-specific rules for string comparison, such as rules for lettercase and accent marks. When specifying collation, the locale field is mandatory; all other collation fields are optional. For descriptions of the fields, see Collation Document.

This option is available in MongoDB 3.4+ and will result in an exception at execution time if specified for an older server version.

If the collation is unspecified but the collection has a default collation, the operation uses the collation specified for the collection. If no collation is specified for the collection or for the operation, MongoDB uses the simple binary comparison used in prior versions for string comparisons.

partialFilterExpression array|object Optional. Creates a partial index.
sparse boolean Optional. Creates a sparse index.
expireAfterSeconds integer Optional. Creates a TTL index.
maxTimeMS integer

Optional. The cumulative time limit in milliseconds for processing operations on the cursor. MongoDB aborts the operation at the earliest following interrupt point.

New in version 1.3.

name string Optional. A name that uniquely identifies the index. By default, MongoDB creates index names based on the key.
background string Optional. Instructs MongoDB to build the index as a background process.
2dsphereIndexVersion integer Optional. Overrides the server’s default version for a 2dsphere index.
session MongoDB\Driver\Session

Optional. Client session to associate with the operation.

Sessions are not supported for server versions prior to 3.6.

New in version 1.3.

writeConcern MongoDB\Driver\WriteConcern

Optional. Write concern to use for the operation. Defaults to the collection’s write concern.

It is not possible to specify a write concern for individual operations as part of a transaction. Instead, set the writeConcern option when starting the transaction with startTransaction.

This is not supported for server versions prior to 3.4 and will result in an exception at execution time if used.

For a full list of the supported index creation options, refer to the createIndexes command reference in the MongoDB manual.

Return Values

The name of the created index as a string.

Errors/Exceptions

MongoDB\Exception\UnsupportedException if options are used and not supported by the selected server (e.g. collation, readConcern, writeConcern).

MongoDB\Exception\InvalidArgumentException for errors related to the parsing of parameters or options.

MongoDB\Driver\Exception\RuntimeException for other errors at the driver level (e.g. connection errors).

Examples

Create a Compound Index

The following example creates a compound index on the borough and cuisine fields in the restaurants collection in the test database.

<?php

$collection = (new MongoDB\Client)->selectCollection('test', 'restaurants');

$indexName = $collection->createIndex(['borough' => 1, 'cuisine' => 1]);

var_dump($indexName);

The output would then resemble:

string(19) "borough_1_cuisine_1"

Create a Partial Index

The following example adds a partial index on the borough field in the restaurants collection in the test database. The partial index indexes only documents where the borough field exists.

<?php

$collection = (new MongoDB\Client)->selectCollection('test, 'restaurants');

$indexName = $collection->createIndex(
   ['borough' => 1],
   [
       'partialFilterExpression' => [
           'borough' => ['$exists' => true],
       ],
   ]
);

var_dump($indexName);

The output would then resemble:

string(9) "borough_1"

See Also