シャードキー値自体に一意性を強制するには、unique パラメータを としてtrue sh.shardCollection()メソッドに渡します。
このタスクについて
シャードキーにユニークインデックスと、シャードキーの個々のコンポーネントではなく、キーの組み合わせ全体に一意性が強制されます。
uniquetrueハッシュされたシャードキーを使用する場合、 を として指定することはできません。
unique: true を指定する場合、次の制限が適用されます。
コレクションが空の場合、
sh.shardCollection()はシャードキーにユニークインデックスがなければそれを作成します。コレクションが空でない場合、
sh.shardCollection()を使用する前に、まずインデックスを作成する必要があります。コレクションにシャードキーをサポートするインデックスがあるものの、そのインデックスが一意でない場合、
sh.shardCollection()はエラーを返します。
シャードキーがプレフィックスであるユニーク複合インデックスを持つことは可能ですが、unique パラメーターを使用する場合、コレクションにはシャードキー上のユニークインデックスが必要です。
uniqueを省略するかunique: false を指定した場合、sh.shardCollection() はコレクションの既存のインデックスを変更しません。シャードキーにユニークインデックスがすでに存在する場合は、そのインデックスは一意のままで、シャーディングされたクラスターはシャード全体のシャードキー値に一意の制約を強制し続けます。
シャーディングされたコレクションの一意のインデックスに適用される制約の完全なセットについては、「 シャーディングされたクラスターで一意性を維持する 」を参照してください。
始める前に
既存のドキュメントがシャードキー値の一意の制約に違反していないことを確認します。
手順
次の例では、 region_id で accounts.namesコレクションをシャーディングし、シャードキー値に一意の制約を強制します。
コレクションをシャーディングします。
一意の インデックスでコレクションをシャードします。region_id uniqueパラメータは の 3sh.shardCollection() つ目の引数です。
sh.shardCollection( "accounts.names", { region_id: 1 }, true )