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

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

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

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

{ x: "hello" }

{ x: "hello", y: null }

{ y: "goodbye" }

{ x: null, y: "goodbye" }

{ z: "oops" }

{ x: null, y: null }

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

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

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

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

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

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

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

コマンド
方式
説明

で更新
multi: true

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

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

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

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

で更新
multi: false

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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