ドキュメントのシャードキー値の変更
項目一覧
シャードキー フィールドが不変の _id
フィールドでない限り、ドキュメントのシャードキー値を更新できます。
重要
シャードキー値の更新時
を使用している 必要
mongos
があります。シャードに直接操作を実行しないでください 。トランザクション内で、または 再試行可能な書き込みとして実行する必要があります。
クエリフィルターの完全なシャードキーに等価条件を含める必要があります 。 たとえば、
{ activityid: 1, userid : 1 }
をシャードキーとして使用するmessages
コレクションで考えてみましょう。 ドキュメントのシャードキー値を更新するには、クエリフィルターにactivityid: <value>, userid: <value>
を含める必要があります。 必要に応じて、クエリに追加のフィールドを含めることができます。
シャーディングされたコレクションに対して実行される場合のその他の操作固有の要件については、特定の書込みコマンド/メソッドも参照してください。
シャードキー値を更新するには、次の操作を使用します。
コマンド | 方式 |
---|---|
multi: false で更新 | を |
を | |
シャードキーの変更によってドキュメントが別のシャードに移動される場合は、一括操作で複数のシャードキーの変更を指定できません。バッチ サイズは 1 である必要があります。 シャードキーの変更によってドキュメントが別のシャードに移動されない場合は、一括操作で複数のシャードキーの変更を指定できます。 を |
警告
シャーディングされたコレクション内のドキュメントには、シャード キー フィールドがないことがあります。ドキュメントのシャード キーの値を変更するときに、誤ってシャード キーを削除しないように注意してください。
例
location
フィールドでシャーディングされているsales
コレクションについて考えてみましょう。 コレクションには、 _id
12345
とlocation
""
を持つドキュメントが含まれています。 このドキュメントの フィールド値をアップデートするには、次のコマンドを実行します。
db.sales.updateOne( { _id: 12345, location: "" }, { $set: { location: "New York"} } )