AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

refineCollectionShardKey (データベースコマンド)

refineCollectionShardKey

コレクションのシャードキーを変更するために、新しいフィールドをサフィックスとして既存のキーに追加します。 コレクションのシャードキーを調整すると、濃度が十分でないために既存のキーがジャンボ (分割できない)チャンクになる状況に対処できます。

注意

データ分散

シャードキーを調整する一環として、 refineCollectionShardKeyコマンドは、チャンク範囲ゾーン範囲を更新して、既存のキー フィールドの範囲値を変更せずに新しいフィールドを組み込みます。 つまり、シャードキーを改善しても、シャードまたはゾーン全体へのチャンクの分散にはすぐに影響しません。 将来の チャンクの分割 や移行は、ルーチンのシャーディング操作の一部として発生します。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、M 10 + クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

注意

refineCollectionShardKeyコマンドを使用するには、シャーディングされたクラスターの機能の互換性バージョン(fcv)4.4である必要があります。

このコマンドの構文は、次のとおりです。

db.adminCommand(
{
refineCollectionShardKey: "<database>.<collection>",
key: { <existing key specification>, <suffix1>: <1|"hashed">, ... }
}
)

このコマンドは、次のフィールドを使用します。

フィールド
タイプ
説明

string

"<database>.<collection>"形式のシャーディングされたコレクションの名前空間

ドキュメント

コレクションの新しいシャードキーとして使用するフィールドを指定するドキュメント。

{ <existing key specification>, <suffix1>: <1|"hashed">, ... }

  • 新しいキーは、既存のシャードキーで開始する必要があります。

  • 新しいキーは、 コマンドを実行するrefineCollectionShardKey 前に 存在する必要があるインデックスでサポートされている必要があります。詳細については、「インデックスの考慮事項」を参照してください。

サフィックス フィールドの場合は、フィールド値を次のいずれかに設定します。

アクセス制御を使用して実行中の場合、コマンドを実行するにはrefineCollectionShardKey データベースやコレクション に対する 特権アクションが必要です。つまり、ユーザーは、次の 特権 を付与する ロール を持っていなければなりません。

{ resource: { db: <database>, collection: <collection> }, actions: [ "refineCollectionShardKey" ] }

組み込みの clusterManager ロールにより、適切な権限が付与されます。

  • インデックスの存在

    コマンドを実行する に、 コマンドの指定された キー をサポートするインデックスが存在している必要があります。

    サポート インデックスは、新しいシャードキー仕様で開始されるインデックスです。つまり、インデックス プレフィックスが新しいシャードキー仕様と一致する。 つまり、シャードキーを{ x: 1, y: 1 } { x: 1 }に変更するには、 かつ{ x: 1, y: 1 } で始まるインデックスが存在する必要があります。例:

    • { x: 1, y: 1 }

    • { x: 1, y: 1, a: 1, b: 1}

    注意

  • ユニークインデックス

    現在のシャード インデックスに一意の制約がある場合、新しいシャードキー インデックスにも一意の制約が必要です。

    新しいシャードキーをサポートするための一意のインデックスを作成したら、 を実行 する前に 古いシャードキーrefineCollectionShardKey インデックスを 削除 します。

    また、現在のシャードインデックスに一意の制約がある場合、新しいシャードキーはそのフィールドのいずれにも"hashed"を指定できません。

    シャーディングされたコレクションと一意のインデックス」も参照してください。

  • インデックス照合
    シャーディングされたコレクションのデフォルトの照合simple以外の場合、インデックスには{ locale : "simple" }の照合ドキュメントが含まれている必要があります。 フィールドがシャードキー パターンをサポートするインデックスの少なくとも 1 つには、単純照合が必要です。

警告

現在のシャードキー フィールドの範囲またはハッシュされたタイプは変更 しない でください。 データの不整合が発生します。 たとえば、シャードキーを{ customer_id: 1 }から{ customer_id: "hashed", order_id: 1 }に変更 しないでください 。

testデータベースで例を設定するには、次の手順に従います。

  1. 次のshardCollection操作を使用して、 testデータベース内のordersコレクションをシャーディングします。 この操作では、 customer_idフィールドを初期シャードキーとして使用します。

    db.adminCommand( { shardCollection: "test.orders", key: { customer_id: 1 } } )

シャードキーをcustomer_idフィールドとorder_idフィールド{ customer_id: 1, order_id: 1 }に変更するには、

  1. Create the index インデックスがまだ存在しない場合に新しいシャードキーをサポートするため。

    db.getSiblingDB("test").orders.createIndex( { customer_id: 1, order_id: 1 } )
  2. refineCollectionShardKeyコマンドを実行して、 order_idフィールドをサフィックスとして追加します。

    db.adminCommand( {
    refineCollectionShardKey: "test.orders",
    key: { customer_id: 1, order_id: 1 }
    } )

コマンドが正常に完了すると、コレクションのシャードキーは{ customer_id: 1, order_id: 1 }に変更されました。 確認するには、 sh.status()を実行します。

Tip

シャードキーを調整すると、コレクション内のすべてのdocumentにサフィックスフィールドが存在しない場合があります。欠落しているシャードキーフィールドを入力するには、欠落しているシャードキー フィールドの設定を参照してください。

シャードキーを検証する前に、コレクション内のすべてまたはほとんどのドキュメントにサフィックス フィールドが含まれていることを確認して、可能であれば、フィールドにその後にフィールドを入力する必要がないようにします。

testデータベースで例を設定するには、次の手順に従います。

  1. フランス語のfrをデフォルトの照合として指定して、 testデータベースにcafésコレクションを作成します。

    db.getSiblingDB("test").createCollection( "cafés", { collation: { locale: "fr" } } );
  2. customer_idフィールドを初期シャードキーとして使用してコレクションをシャーディングします。 コレクションにはデフォルトのfr照合があり、 simple照合がないため、 shardCollectionコマンドにはcollation: { locale: "simple" }オプションを含める必要があります。

    db.adminCommand( {
    shardCollection: "test.cafés",
    key: { customer_id: 1 },
    collation: { locale: "simple" }
    } )

シャードキーを変更して、 customer_idフィールドとorder_idフィールド{ customer_id: 1, order_id: 1 }の両方を指定するには、

  1. インデックスがまだ存在しない場合に新しいシャードキーをサポートするためのCreate the index コレクションは非単純な照合を使用するため、インデックスにはcollation: { locale: "simple" }オプションを含める必要があります。

    db.getSiblingDB("test").cafés.createIndex(
    { customer_id: 1, order_id: 1 },
    { collation: { locale: "simple" } }
    )
  2. refineCollectionShardKeyコマンドを実行して、 order_idフィールドをサフィックスとして追加します。

    db.adminCommand( {
    refineCollectionShardKey: "test.cafés",
    key: { customer_id: 1, order_id: 1 }
    } )

コマンドが正常に完了すると、コレクションのシャードキーは{ customer_id: 1, order_id: 1 }に変更されました。 確認するには、 sh.status()を実行します。

Tip

シャードキーを調整すると、コレクション内のすべてのdocumentにサフィックスフィールドが存在しない場合があります。欠落しているシャードキーフィールドを入力するには、欠落しているシャードキー フィールドの設定を参照してください。

シャードキーを検証する前に、コレクション内のすべてまたはほとんどのドキュメントにサフィックス フィールドが含まれていることを確認して、可能であれば、フィールドにその後にフィールドを入力する必要がないようにします。