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

MongoDBで重複データの挿入を防ぐ方法:unique:trueの使い方

MongoDBで重複データの挿入を防ぐ方法

MongoDBにレコードを挿入する際に重複を避けたい場合は、インデックス作成時に「unique:true」オプションを使用します。この設定により、指定したフィールドに一意制約が適用され、すでに存在する値を持つドキュメントの新規挿入が自動的に拒否されます。

まずはドキュメントを格納するコレクションを作成し、あえて重複するレコードを追加しようとして、実際の挙動を確認していきましょう。

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

createIndex()メソッドを使用して、「StudentFirstName」フィールドに対するユニークインデックスを作成します。

> db.insertWithoutDuplicateDemo.createIndex({"StudentFirstName":1},{ unique: true } );
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

実行結果の「numIndexesAfter」が2になっていることから、デフォルトの_idインデックスに加えて、今回作成したユニークインデックスが追加されたことが確認できます。

2. ドキュメントの挿入と重複エラーの確認

次に、insert()メソッドでドキュメントを挿入していきます。「Chris」と「David」を挿入した後、もう一度「Chris」を挿入しようとするとどうなるか見てみましょう。

> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"Chris"},{ upsert: true });
WriteResult({ "nInserted" : 1 })
> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"David"},{ upsert: true });
WriteResult({ "nInserted" : 1 })
> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"Chris"},{ upsert: true });
WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "E11000 duplicate key error collection: test.insertWithoutDuplicateDemo index:        StudentFirstName_1 dup key: { : \"Chris\" }"
    }
})
> db.insertWithoutDuplicateDemo.insert({"StudentFirstName":"Bob"},{ upsert: true });
WriteResult({ "nInserted" : 1 })

3回目の挿入で「Chris」を再び追加しようとしたところ、エラーコード「11000」(E11000 duplicate key error)が発生しました。これはユニークインデックスによって重複キーの挿入がブロックされたことを示しています。一方、新しい値である「Bob」は問題なく挿入できています。

3. 挿入結果の確認

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

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

このクエリを実行すると、以下のような出力が得られます。

{
    "_id" : ObjectId("5e064405150ee0e76c06a054"),
    "StudentFirstName" : "Chris"
}
{
    "_id" : ObjectId("5e064410150ee0e76c06a055"),
    "StudentFirstName" : "David"
}
{ "_id" : ObjectId("5e06441f150ee0e76c06a057"), "StudentFirstName" : "Bob" }

出力結果を見ると、「Chris」「David」「Bob」の3件のみが登録されており、重複した「Chris」は挿入されていないことがわかります。このように、unique:trueを指定したインデックスを活用することで、MongoDBでもデータの整合性を保ちながら、重複のないデータ管理を実現できます。

  1. MongoDBコレクションから重複を削除する方法|unique制約の使い方を解説

    MongoDBコレクションから重複を削除する方法MongoDBのコレクションに重複データが登録されるのを防ぎたい場合は、ユニーク制約(unique: true)を設定するのが最も基本的かつ確実な方法です。対象フィールドにユニークインデックスを作成しておくことで、同じ値を持つドキュメントの挿入が自動的に拒否され、コレクション内に重複が存在しない状態を維持できます。基本構文以下のように、コレクション名とフィールド名を指定してユニークインデックスを作成します。「dropDups: true」を付けることで、インデックス作成時点で既に存在していた重複ドキュメントも削除され、各グループの最初の1件のみが

  2. MongoDBで配列内の重複要素を検出・確認する方法

    MongoDBで配列内の重複要素を検出・確認する方法配列フィールドの中に重複した要素が存在するかどうかを確認したい場合、MongoDBではaggregate()メソッドを使用します。本記事では、実際のサンプルコードを通じて、集計パイプライン(アグリゲーションフレームワーク)を使った重複検出の手順をわかりやすく解説します。1. サンプルコレクションの作成まず、テスト用のドキュメントを挿入してコレクションを作成しましょう。意図的に重複を含む配列を持つドキュメントも用意します。> db.demo756.insertOne({SubjectName:[MySQL,MongoDB,Java]});