MongoDBで一意(ユニーク)なフィールドを作成する方法【unique:trueの使い方】
MongoDBで一意のフィールドを作成するには?
MongoDBで特定のフィールドに重複した値が入らないようにしたい場合は、createIndex()メソッドでインデックスを作成する際に、オプションとして「unique: true」を指定します。これにより、そのフィールドに対して一意制約(ユニーク制約)が適用され、同じ値を持つドキュメントの挿入が自動的に拒否されるようになります。
ここからは、実際にコレクションを作成し、ドキュメントを挿入しながら具体的な手順を見ていきましょう。
1. ユニークインデックスを作成する
まず、EmployeeNameフィールドに対してユニークインデックスを作成します。
> db.demo82.createIndex({"EmployeeName":1},{unique:true});
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}この時点ではコレクションが存在しないため、「createdCollectionAutomatically : true」と表示され、コレクションも同時に自動生成されています。
2. ドキュメントを挿入して動作を確認する
次に、ドキュメントをいくつか挿入してみます。まずは異なる名前を2件登録します。
> db.demo82.insertOne({"EmployeeName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bfb1b71bf0181ecc422a0")
}
> db.demo82.insertOne({"EmployeeName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2bfb1f71bf0181ecc422a1")
}続いて、すでに登録済みの値「Chris」を再度挿入してみましょう。
> db.demo82.insertOne({"EmployeeName":"Chris"});
2020-01-25T13:54:00.410+0530 E QUERY [js] WriteError: E11000 duplicate key error collection: test.demo82 index: EmployeeName_1 dup key: { : "Chris" } :
WriteError({
"index" : 0,
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: test.demo82 index: EmployeeName_1 dup key: { : \"Chris\" }",
"op" : {
"_id" : ObjectId("5e2bfb2071bf0181ecc422a2"),
"EmployeeName" : "Chris"
}
})すると、エラーコードE11000(duplicate key error)が発生し、挿入が拒否されます。これは、ユニークインデックスによって「Chris」という値がすでに存在することが検出されたためです。
3. find()メソッドで登録結果を確認する
最後に、find()メソッドを使ってコレクション内の全ドキュメントを表示します。
> db.demo82.find();
実行結果は以下の通りです。先ほど「unique: true」を設定しているため、重複した値「Chris」は挿入されておらず、最初に登録した2件だけが保存されていることが確認できます。
{ "_id" : ObjectId("5e2bfb1b71bf0181ecc422a0"), "EmployeeName" : "Chris" }
{ "_id" : ObjectId("5e2bfb1f71bf0181ecc422a1"), "EmployeeName" : "David" }まとめ
MongoDBでフィールドの一意性を保証したい場合は、db.collection.createIndex({フィールド名: 1}, {unique: true})でユニークインデックスを作成するだけで実現できます。重複データによる不整合を防ぎたい場面(メールアドレスや社員番号など)で非常に有効な機能なので、ぜひ活用してください。
-
MongoDBコレクション内の空のフィールドをチェックする方法
MongoDBのコレクション内に空(空文字列)のフィールドが存在するかどうかを調べたい場合、$exists演算子と$eq演算子を組み合わせて使うのが効果的です。この記事では、実際にコレクションを作成しながら、空のフィールドを持つドキュメントを検索する具体的な手順を解説します。 ポイント:$exists と $eq の組み合わせ MongoDBでは「フィールドが存在するが値が空文字列である」状態と、「フィールド自体が存在しない」「値がnullである」状態は区別されます。そのため、空文字列を正確に検索するには次のような条件を使います。 { フィールド名 : { $exists : true, $
-
MySQLで既存のカラムにUNIQUE制約を追加する方法
MySQLで既存のカラムを一意(UNIQUE)にする方法MySQLで既存のフィールド(カラム)を一意にするには、ALTER TABLEコマンドを使用してUNIQUE制約を設定します。本記事では、実際のコード例とともに、その手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。mysql> create table AddingUnique -> ( -> Id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.44 s