複合インデックスに一意の制約を適用します。一意の複合インデックスでは、インデックスキー値の 組み合わせ に一意であることが強制されます。
MongoDB Shell でユニークインデックスを作成するには、 オプションをdb.collection.createIndex() uniqueに設定して、true メソッドを使用します。
db.collection.createIndex( { <field1>: <sortOrder>, <field2>: <sortOrder>, ... <fieldN>: <sortOrder> }, { unique: true } )
このタスクについて
この例では、 membersコレクションの groupNumber、lastname、firstname フィールドに一意の複合インデックスを追加します。インデックスにより、これらのフィールド値の組み合わせがコレクション内の各ドキュメントで一意になるようにします。
手順
コレクションの groupNumberlastname、 、firstname フィールドにユニークインデックスを作成するには、membersmongosh で次のコマンドを実行します。
db.members.createIndex( { groupNumber: 1, lastname: 1, firstname: 1 }, { unique: true } )
作成されたインデックスでは、groupNumber、lastname、firstname の値の組み合わせは必然的に一意になります。
埋め込み配列を持つフィールドに対する複合一意のインデックス
次のドキュメントを含むコレクションについて考えてみます。
db.myColl.insertOne( { _id: 1, a: [ { loc: "A", qty: 5 }, { qty: 10 } ] } )
次のとおり、ユニークな複合マルチキー インデックスを a.loc と a.qty に作成します。
db.myColl.createIndex( { "a.loc": 1, "a.qty": 1 }, { unique: true } )
ユニークインデックスを使用すると、a.loc と a.qty の値の 組み合わせが必然的に一意になるため、次のドキュメントをコレクションに挿入できます。
db.myColl.insertMany( [ { _id: 2, a: [ { loc: "A" }, { qty: 5 } ] }, { _id: 3, a: [ { loc: "A", qty: 10 } ] } ] )