MongoCollection
PHP Manual

MongoCollection::ensureIndex

(PECL mongo >=0.9.0)

MongoCollection::ensureIndex Crée un index sur un champ donné

Description

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

Un index unique ne peut être créé dans un champ si plusieurs documents existants ne contiennent pas ce champ. Le champ vaut effectivement NULL pour ces documents et ces derniers ne sont déjà pas uniques.

Liste de paramètres

keys

Le ou les champs à indexer.

options

Ce paramètre est un tableau associatif sous la forme array("optionname" => <boolean>, ...). Actuellement, les options supportées sont :

  • "unique"

    Crée un index unique.

  • "dropDups"

    Si un index unique est sur le point d'être créé et que les valeurs dupliquées existent, les valeurs existantes seront supprimées.

  • "background"

    Si vous utilisez la version 1.3.2+ de MongoDB, vous pouvez créer des index en arrière plan pendant que d'autres opérations se déroulent. Par défaut, la création des index est synchrone. Si vous précisez TRUE à cette option, la création d'index sera asynchrone.

  • "safe"

    Depuis la version 1.0.4 du driver, vous pouvez spécifier une valeur booléenne pour vérifier si la création de l'index a réussi. Le driver lancera une exception MongoCursorException si la création de l'index échoue.

  • "name"

    Après la version 1.0.4 du driver (la version 1.0.4 n'est pas concernée), vous pouvez spécifier le nom de l'index. Ceci peut être utile si vous indexez plusieurs clés et que Mongo vous indique que les noms des index sont trop longs.

Valeurs de retour

Returns TRUE.

Historique

Version Description
1.0.2 Le paramètre "options" passe de booléen à un tableau. En version Pre-1.0.2, le second paramètre était une valeur booléenne optionnelle spécifiant un index unique.

Exemples

Exemple #1 Exemple avec MongoCollection::ensureIndex()

<?php

$c 
= new MongoCollection($db'foo');

// Crée un index montant sur 'x'
$c->ensureIndex(array('x' => 1));

// Crée un index montant sur 'z' et descendant sur 'zz'
$c->ensureIndex(array('z' => 1'zz' => -1));

// Crée un index unique sur 'x'
$c->ensureIndex(array('x' => 1), array("unique" => true));
?>

Exemple #2 Exemple de suppression de données dupliquées

<?php

$collection
->insert(array("username" => "joeschmoe"));
$collection->insert(array("username" => "joeschmoe"));

/*
 * La création d'index a échoué, vous ne pouvez pas créer d'index unique
 * sur une clé ne possédant pas de valeurs non-uniques
 */
$collection->ensureIndex(array("username" => 1), array("unique" => 1));

/*
 * La création d'index a réussi : un des documents est supprimé de la collection
 */
$collection->ensureIndex(array("username" => 1), array("unique" => 1"dropDups" => 1));

/*
 * Maintenant que nous avons un index unique, les prochaines insertions
 * avec le même nom d'utilisateur (comme ci-dessous) échoueront
 */
$collection->insert(array("username" => "joeschmoe"));

?>

Exemple #3 Indexation géospatiales

Mongo supporte l'indexation géospatiales, vous permettant de chercher des documents se trouvant près d'un endroit donné, ou dans une forme. Par exemple, pour créer un index géospatial sur le champ "loc" :

<?php

$collection
->ensureIndex(array("loc" => "2d"));

?>

Voir aussi

Documentation de MongoDB concernant les» index et les » indexes géospatiales.


MongoCollection
PHP Manual