MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでインデックスを作成する方法|ユニークインデックスの作成手順を実例付きで解説

MongoDBでインデックスを作成するには、ensureIndex()メソッドを使用します。なお、新しいバージョンのMongoDBではensureIndex()は非推奨となっており、createIndex()の使用が推奨されている点に注意してください。本記事では、一意性(ユニーク)制約付きインデックスの作成手順を、実際の実行例とともに解説します。

コレクションの作成

まず、以下のクエリを実行してコレクションを作成します。

> db.createCollection("creatingUniqueIndexDemo");
{ "ok" : 1 }

ユニークインデックスの作成

次に、作成したコレクションに対してインデックスを作成します。{unique:true}オプションを指定することで、「UserCountryName」フィールドに重複した値を登録できないユニークインデックスが設定されます。

> db.creatingUniqueIndexDemo.ensureIndex({"UserCountryName":1},{unique:true});
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

「numIndexesBefore」が1に対して「numIndexesAfter」が2になっていることから、新しいインデックスが正常に作成されたことが確認できます。

ドキュメントの挿入とユニーク制約の動作確認

続いて、作成したコレクションにドキュメントを挿入していきます。

> db.creatingUniqueIndexDemo.insertOne({"UserName":"John","UserAge":21,"UserCountryName":"US"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9947bd330fd0aa0d2fe4d8")
}
> db.creatingUniqueIndexDemo.insertOne({"UserName":"Mike","UserAge":23,"UserCountryName":"UK"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9947c9330fd0aa0d2fe4d9")
}

ここで、3つ目のドキュメントとして既に登録済みの「US」を「UserCountryName」に指定して挿入しようとすると、ユニークインデックスによって重複キーエラー(E11000)が発生し、書き込みに失敗します。

> db.creatingUniqueIndexDemo.insertOne({"UserName":"Robert","UserAge":26,"UserCountryName":"US"});
WriteError({
    "index" : 0,
    "code" : 11000,
    "errmsg" : "E11000 duplicate key error collection: test.creatingUniqueIndexDemo index: UserCountryName_1 dup key: { : \"US\" }",
    "op" : {
        "_id" : ObjectId("5c9947d8330fd0aa0d2fe4da"),
        "UserName" : "Robert",
        "UserAge" : 26,
        "UserCountryName" : "US"
    }
})

エラーメッセージにある「E11000 duplicate key error」は、ユニークインデックスが設定されたフィールドに重複した値を入れようとした際に発生する典型的なエラーです。一方、次のように重複しない値「AUS」を指定すれば、問題なく挿入できます。

> db.creatingUniqueIndexDemo.insertOne({"UserName":"Robert","UserAge":26,"UserCountryName":"AUS"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c9947e3330fd0aa0d2fe4db")
}

登録されたドキュメントの確認

find()メソッドを使えば、コレクション内のすべてのドキュメントを表示できます。

> db.creatingUniqueIndexDemo.find().pretty();

実行結果は以下の通りです。

{
    "_id" : ObjectId("5c9947bd330fd0aa0d2fe4d8"),
    "UserName" : "John",
    "UserAge" : 21,
    "UserCountryName" : "US"
}
{
    "_id" : ObjectId("5c9947c9330fd0aa0d2fe4d9"),
    "UserName" : "Mike",
    "UserAge" : 23,
    "UserCountryName" : "UK"
}
{
    "_id" : ObjectId("5c9947e3330fd0aa0d2fe4db"),
    "UserName" : "Robert",
    "UserAge" : 26,
    "UserCountryName" : "AUS"
}

まとめ

MongoDBでは、ensureIndex()(最新バージョンではcreateIndex())に{unique:true}オプションを付けるだけで、フィールド値の重複を防止するユニークインデックスを簡単に作成できます。誤って同じ値を持つデータを登録してしまうトラブルを防げるため、メールアドレスや国コードなど一意性が必要なフィールドには積極的に活用しましょう。

  1. HTMLでキャプション(表題)付きのテーブルを作成する方法

    HTMLでキャプション(表題)付きのテーブルを作成するには、<caption>タグを使用します。キャプションはテーブルの内部に配置され、<table>タグの直後に記述するのが決まりです。 <caption>タグで指定したテキストは、デフォルトではテーブルの上部中央に表示されます。表示位置を変更したい場合は、CSSの「caption-side」プロパティ(top・bottom・left・rightなど)を使って調整することも可能です。 コード例 以下のコードを実行すると、キャプション付きのテーブルがどのように表示されるかを確認できます。 <!DOCTY

  2. HTMLで参考文献(Bibliography)を作成する方法

    参考文献(Bibliography)とは、執筆時に参照した書籍や資料の一覧をまとめて記載するセクションのことです。HTMLを使えば、こうした参考文献リストを簡単に作成できます。具体的には、<ol>タグで書籍を番号付きリストとして列挙し、<cite>タグで作品のタイトルをマークアップします。 <cite>タグは、書籍のタイトルだけでなく、楽曲、絵画、映画など、さまざまな作品のタイトルを示す際にも使用できます。このタグは「引用」を意味しており、タグ内に記述した内容はすべて作品のタイトルとして扱われます。 サンプルコード それでは、実際にHTMLで参考文献リスト