Creates an index on the given field(s), or does nothing if the index already exists

MongoCollection::drop
MongoCollection::find
MongoCollection
PHP Manual

# MongoCollection::ensureIndex

(PECL mongo >=0.9.0)

MongoCollection::ensureIndex — Creates an index on the given field(s), or does nothing if the index already exists

### Description

public boolean MongoCollection::ensureIndex ( array `$keys` , array `$options` )

A unique index cannot be created on a field if multiple existing documents do not contain the field. The field is effectively `NULL` for these documents and thus already non-unique.

### Parameters

`keys`

  Field or fields to use as index.

`options`

  This parameter is an associative array of the form array("optionname" => <boolean>, ...). Currently supported options are:

  - "unique"

    Create a unique index.

  - "dropDups"

    If a unique index is being created and duplicate values exist, drop all but one duplicate value.

  - "background"

    If you are using MongoDB version 1.3.2+, you can create indexes in the background while other operations are taking place. By default, index creation happens synchronously. If you specify `TRUE` with this option, index creation will be asynchronous.

  - "safe"

    Starting with driver version 1.0.4, you can specify a boolean value for checking if the index creation succeeded. The driver will throw a MongoCursorException if index creation failed.

  - "name"

    After driver version 1.0.4 (NOT including 1.0.4) you can specify an index name. This can be useful if you are indexing many keys and Mongo complains about the index name being too long.

### Return Values

Returns `TRUE`.

### Changelog

Version | Description
--- | ---
1.0.2 | Changed "options" parameter from boolean to array. Pre-1.0.2, the second parameter was an optional boolean value specifying a unique index.

### Examples

Example #1 MongoCollection::ensureIndex() example

`<?php
$c = new MongoCollection($db, 'foo');
// create an index on 'x' ascending
$c->ensureIndex(array('x' => 1));
// create an index on 'z' ascending and 'zz' descending
$c->ensureIndex(array('z' => 1, 'zz' => -1));
// create a unique index on 'x'
$c->ensureIndex(array('x' => 1), array("unique" => true));
?>`

Example #2 Drop duplicates example

`<?php
$collection->insert(array("username" => "joeschmoe"));
$collection->insert(array("username" => "joeschmoe"));
/*
* index creation fails, you can't create a unique index on a key with
* non-unique values
*/
$collection->ensureIndex(array("username" => 1), array("unique" => 1));
/*
* index creation succeeds: one of the documents is removed from the collection
*/
$collection->ensureIndex(array("username" => 1), array("unique" => 1, "dropDups" => 1));
/*
* now we have a unique index, more inserts with the same username (such as the
* one below) will fail
*/
$collection->insert(array("username" => "joeschmoe"));
?>`

Example #3 Geospatial Indexing

Mongo supports geospatial indexes, which allow you to search for documents near a given location or within a shape. For example, to create a geospatial index on the "loc" field:

`<?php
$collection->ensureIndex(array("loc" => "2d"));
?>`

### See Also

MongoDB core docs on » vanilla indexes and » geospatial indexes.

MongoCollection::drop
MongoCollection::find
MongoCollection
PHP Manual