Docs Menu
Docs Home
/ / /
PHP Library Manual
/ /


On this page

  • Definition
  • Parameters
  • Return Values
  • Errors/Exceptions
  • Behavior
  • Example
  • See Also

Create one or more indexes for the collection.

function createIndexes(
array $indexes,
array $options = []
): string[]
$indexes : array

The indexes to create on the collection.

For example, the following specifies a unique index on the username field and a compound index on the email and createdAt fields:

[ 'key' => [ 'username' => -1 ], 'unique' => true ],
[ 'key' => [ 'email' => 1, 'createdAt' => 1 ] ],
$options : array

An array specifying the desired options.


Enables users to specify an arbitrary comment to help trace the operation through the database profiler, currentOp output, and logs.

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

New in version 1.13.


Specifies how many data-bearing members of a replica set, including the primary, must complete the index builds successfully before the primary marks the indexes as ready.

This option accepts the same values for the w field in a write concern plus "votingMembers", which indicates all voting data-bearing nodes.

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

New in version 1.7.


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.


Client session to associate with the operation.

New in version 1.3.


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.

The names of the created indexes as an array of strings.

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 extension level (e.g. connection errors).

The $indexes parameter is an array of index specification documents. Each element in $indexes must itself be an array or object with a key field, which corresponds to the $key parameter of createIndex(). The array or object may include other fields that correspond to index options accepted by createIndex(). For a full list of the supported index creation options, refer to the createIndexes command reference in the MongoDB manual.

For example, the following $indexes parameter creates two indexes. The first is an ascending unique index on the username field and the second is a 2dsphere index on the loc field with a custom name:

[ 'key' => [ 'username' => 1 ], 'unique' => true ],
[ 'key' => [ 'loc' => '2dsphere' ], 'name' => 'geo_index' ],

The following example creates two indexes on the restaurants collection in the test database. One index is a compound index on the borough and cuisine fields and the other is 2dsphere index on the loc field with a custom name.

$collection = (new MongoDB\Client)->selectCollection('test', 'restaurants');
$indexNames = $collection->createIndexes([
[ 'key' => [ 'borough' => 1, 'cuisine' => 1] ],
[ 'key' => [ 'loc' => '2dsphere'], 'name' => 'geo_index' ],

The output would then resemble:

array(2) {
string(19) "borough_1_cuisine_1"
string(9) "geo_index"