Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

欠落しているシャードキー フィールドの設定

欠落しているシャードキーフィールドは、null 値を持つシャードキーと同じチャンク範囲内にあります。例、シャードキーがフィールド { x: 1, y: 1 } にある場合、次のようになります。

シャードキーが欠落しているドキュメント
同じ範囲に該当

{ x: "hello" }

{ x: "hello", y: null }

{ y: "goodbye" }

{ x: null, y: "goodbye" }

{ z: "oops" }

{ x: null, y: null }

シャードキーフィールドが欠落しているdocumentを対象とするには、シャードキーフィールドに { $exists: false } フィルタ条件を使用できます。例、シャードキーがフィールド { x: 1, y: 1 } にある場合、次のクエリを実行中ことで、シャードキーフィールドが欠落しているdocumentを見つけることができます。

db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } )

ヌル等価一致フィルタ条件を指定した場合(つまり{ x: null }) の場合、フィルターは、シャード キーフィールドが欠落しているドキュメント と、 シャードキーフィールドがに設定されているドキュメントの両方null に一致します。

upsert 指定による書き込みなど、一部の書き込み操作では、シャードキーの等価一致が必要です。このような場合、シャードキーが欠落しているドキュメントを対象とするには、null 等価一致に加えて別のフィルター条件を含めます。以下に例を挙げます。

{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key

シャードキー フィールドがない場合は、シャードキー フィールドをnullに設定できます。 欠落しているシャードキー フィールドをnull以外の値に設定する場合は、「ドキュメントのシャードキー値の変更 」を参照してください。

更新を実行するには、 mongosで次の操作を使用できます。

コマンド
方式
説明
update with
multi: true
  • 欠落しているキー値をnullのみに設定するために使用できます。

  • トランザクション内またはトランザクション外で実行できます。

  • 再試行可能な書き込み として実行することも、実行しないこともできます。

  • 追加の要件については、特定の コマンドまたはメソッドを参照してください。

update with
multi: false
  • 欠落しているキー値をnullまたはその他の値に設定するために使用できます。

  • 欠落しているシャードキー フィールドを設定するための更新は、次のいずれかの要件を満たす必要があります。

    • クエリのフィルターに、クエリ内の完全なシャードキーに対する等価条件が含まれている

    • クエリのフィルターに、_id の完全一致が含まれている

    • 単一のシャードを対象としている更新

  • null以外の値に設定するには、 「 ドキュメントのシャードキー値の変更 」を参照してください。

  • 追加の要件については、特定の コマンドまたはメソッドを参照してください。

  • 欠落しているキー値をnullまたはその他の値に設定するために使用できます。

  • 1 つのドキュメントのみを明示的に更新するメソッドで欠落しているシャードキー フィールドを設定する場合、更新は次のいずれかの要件を満たす必要があります。

    • クエリのフィルターに、クエリ内の完全なシャードキーに対する等価条件が含まれている

    • クエリのフィルターに、_id の完全一致が含まれている

    • 単一のシャードを対象としている更新

  • 欠落しているキー値は、 nullで一致させるときに返されます。 nullであるキー値の更新を回避するには、必要に応じて追加のクエリ条件を含めます。

  • null以外の値に設定するには、 「 ドキュメントのシャードキー値の変更 」を参照してください。

  • 追加の要件については、特定の コマンドまたはメソッドを参照してください。

  • null値に設定するには、一括操作で複数のシャードキーの変更を指定できます。

  • 1 つのドキュメントのみを明示的に更新するメソッドで欠落しているシャードキー フィールドを設定する場合、更新は次のいずれかの要件を満たす必要があります。

    • クエリのフィルターに、クエリ内の完全なシャードキーに対する等価条件が含まれている

    • クエリのフィルターに、_id の完全一致が含まれている

    • 単一のシャードを対象としている更新

  • null以外の値に設定するには、 「 ドキュメントのシャードキー値の変更 」を参照してください。

  • 追加の要件については、基礎となるコマンドまたはメソッドを参照してください。

locationフィールドでシャーディングされているsalesコレクションについて考えてみましょう。 コレクション内の一部のドキュメントには、 locationフィールドがありません。 欠落しているフィールドは、フィールドの null 値と同じとみなされます。 これらのフィールドを明示的にnullに設定するには、次のコマンドを実行します。

db.sales.updateOne(
{ _id: 12345, location: null },
{ $set: { location: null } }
)

欠落しているシャードキー フィールドをdb.collection.updateOne()または 1 つのドキュメントのみを明示的に更新する別のメソッドで設定する場合、更新は次のいずれかの要件を満たしている必要があります。

  • クエリのフィルターに、クエリ内の完全なシャードキーに対する等価条件が含まれている

  • クエリのフィルターに、_id の完全一致が含まれている

  • 単一のシャードを対象としている更新

戻る

シャードキー値の変更

項目一覧