(PECL mongo >=0.9.0)
MongoCollection::deleteIndex — コレクションからインデックスを削除する
$keys
)このメソッドは、以下と同等です。
<?php
public function deleteIndexes($keys) {
// toIndexString は protected メソッドで、文字列や配列そしてオブジェクトを
// インデックス名に変換します
$index = $this->toIndexString($keys);
return $this->db->command(array("deleteIndexes" => $this->getName(),
"index" => $index);
}
?>
インデックスの作成時に、一意な名前が与えられます。この名前は、ユーザーが設定する ( MongoCollection::ensureIndex() の "name" オプション) こともあれば、キーの名前や方向の組み合わせからドライバが自動生成することもあります。 この名前を使って、 MongoCollection::deleteIndex() による削除を行います。
残念ながら、 MongoCollection::ensureIndex() が生成する名前はシェルで作るものとは微妙に異なります。 そして過去との互換性の問題のため、 MongoCollection::deleteIndex() では自分で設定した名前のインデックスを削除できません。 シェルで作ったり自分で名前を設定したりしたインデックスを削除するいちばんの方法は、 データベースコマンド deleteIndexes を使うことになります。
したがって、"superfast query" という名前のインデックスを作った場合、 それを PHP のドライバで削除するには次のようにするしかありません。
<?php
$db->command(array("deleteIndexes" => $collection->getName(), "index" => "superfast query");
?>
インデックスの名前を調べるには、データベースの system.indexes コレクションを検索して name フィールドを調べます。
keys
インデックスを削除したいフィールド。
成功した場合にキーの名前、それ以外の場合に NULL
を返します。
例1 MongoCollection::deleteIndex() の例
この例は、文字列パラメータおよび配列パラメータを関数に渡します。
<?php
$m = new MongoClient();
$c = $m->example->indices;
// インデックスを作成します
$c->ensureIndex(array("i"=>1));
// シンプルなインデックスを削除します
$c->deleteIndex("i");
// 複数キーのインデックスを作成します
$c->ensureIndex(array("j" => 1, "k" => 1));
// 複数キーのインデックスを削除します
$c->deleteIndex(array("j" => 1, "k" => 1));
?>