MongoCollection::deleteIndex

(PECL mongo >=0.9.0)

MongoCollection::deleteIndexコレクションからインデックスを削除する

説明

public MongoCollection::deleteIndex ( string|array $keys ) : array

このメソッドは、以下と同等です。

<?php

public function deleteIndexes($keys) {
  
$indexName $this->toIndexString($keys);

  return 
$this->db->command(array(
    
"deleteIndexes" => $this->getName(),
    
"index" => $indexName,
  ));
}

?>

インデックスの作成時に、一意な名前が与えられます。この名前は一般に、 キーの名前や方向の組み合わせからドライバが自動生成します。しかし自分で名前をつけることも可能で、 その場合は MongoCollection::createIndex()"name" オプションを利用します。

残念ながら、MongoCollection::deleteIndex() は、 独自に名前を設定したインデックスを削除できません。過去のバージョンとの互換性の問題があるからです。 文字列を指定した場合はフィールド名とみなされ、そのフィールドの昇順と解釈されます。 つまり、引数が "x" だった場合は "x_1" という名前を利用します。 配列やオブジェクトを指定した場合は、 MongoCollection::createIndex() に同じものを渡した場合と同様にして名前を生成します。

自分で名前を設定したインデックスを削除するには、 データベースコマンド deleteIndexes を使う必要があります。 たとえば、"myIndex" というインデックスを PHP ドライバで削除するには、次のようにします。

<?php

$db
->command(array(
  
"deleteIndexes" => $collection->getName(),
  
"index" => "myIndex",
));

?>

PHP ドライバで使うインデックスの名前を調べるには、データベースの system.indexes コレクションを検索して、結果の "name" フィールドを調べます。 "ns" フィールドは、そのインデックスが属するコレクションを表します。

パラメータ

keys

インデックスのフィールドをキーとする配列。 各フィールドの値は、インデックスの方向あるいは » インデックスの型 を表します。 方向を指定する場合は、1 が昇順で -1 が降順を表します。

文字列を指定した場合はフィールド名とみなされ、そのフィールドの昇順と解釈されます。

返り値

データベースからの応答を返します。

例1 MongoCollection::deleteIndex() の例

この例は、文字列パラメータおよび配列パラメータを関数に渡します。

<?php

$m 
= new MongoClient();
$c $m->example->indices;

// シンプルなインデックスを作成し、削除します
$c->createIndex(array("i"=>1));
$c->deleteIndex("i");

// 複数キーのインデックスを作成し、削除します
$c->ensureIndex(array("j" => 1"k" => 1));
$c->deleteIndex(array("j" => 1"k" => 1));

?>

参考

add a note add a note

User Contributed Notes 1 note

up
-2
nanhe dot kumar at gmail dot com
5 years ago
<?php
/*
How can delete Index through Index name.
*/
function deleteIndex($db, $collection, $indexName) {
    if (
class_exists("MongoClient")) {
       
$m = new MongoClient();
    } else {
       
$m = new Mongo();
    }
   
$indexes = $m->{$db}->{$collection}->getIndexInfo();
    foreach (
$indexes as $index) {
        if (
$index['name'] === $indexName) {
            return
$m->{$db}->command(array("deleteIndexes" => $this->m->{$db}->{$collection}->getName(), "index" =>$index['key']));
            break;
        }
    }
    return
false;
}   
   
$response=deleteIndex('student','class','roll');
    echo
"<pre>;
    print_r(
$response);
    echo "
</pre>";

?>

Array
(
    [nIndexesWas] => 2
    [ok] => 1
)
To Top