Docs Menu
Docs Home
/
MongoDBマニュアル

任意のフィールドに対する一意の制約

項目一覧

  • Considerations

一意のフィールドをシャードキーとして使用できない場合や、複数のフィールドに一意性を適用する必要がある場合は、「プロキシ コレクション」として機能する別のコレクションを作成する必要があります。 このコレクションには、元のドキュメントへの参照( ObjectId )と一意のキーの両方が含まれている必要があります。

ユーザー情報をストアするコレクション records を考慮します。フィールド email はシャードキーではありませんが、一意である必要があります。

proxy コレクションには、次のものが含まれます。

{
"_id" : ObjectId("...")
"parent_id" : "<ID>"
"email" : "<string>"
}

次のコマンドを使用して、email フィールドに一意のインデックスを作成します。

db.proxy.createIndex( { "email" : 1 }, { unique : true } )

次の例えでは、まず、ターゲット フィールドと生成された一意の ID を含むドキュメントを proxy コレクションに挿入します。操作が成功すると、完全なドキュメントが records コレクションに挿入されます。

records = db.getSiblingDB('records');
proxy = db.getSiblingDB('proxy');
var primary_id = ObjectId();
proxy.insertOne({
"_id" : primary_id
"email" : "example@example.net"
})
// if: the above operation returns successfully,
// then continue:
records.insertOne({
"_id" : primary_id
"email": "example@example.net"
// additional information...
})

この方法では、ドキュメントの挿入時に MongoDB が自動的に ID を作成するのではなく、primary_id フィールドに一意の ID を作成する必要があることに注意してください。

複数のフィールドに一意性を強制する必要がある場合、各フィールドには独自のプロキシ コレクションが必要になります。

Tip

次を参照してください。

createIndex()shardCollection の完全なドキュメント。

  • アプリケーションは、ドキュメントを "プロキシ" コレクションに挿入するときにエラーを検出し、2 つのコレクション間の整合性を強制する必要があります。

  • プロキシ コレクションでシャーディングが必要な場合は、一意性を強制したい単一フィールドでシャードする必要があります。

  • シャーディングされたプロキシ コレクションを使用して複数のフィールドに一意性を強制するには、一意性を適用するフィールドごとに 1 つのプロキシ コレクションが必要です。1 つのプロキシ コレクションに複数の一意なインデックスを作成した場合、プロキシ コレクションをシャードすることはできません

次へ

MongoDB とは?

項目一覧