チャンクの範囲と欠落しているシャードキー フィールド
欠落しているシャードキー フィールドは、null 値を持つシャードキーと同じチャンク範囲内にあります。たとえば、シャードキーがフィールド { x: 1, y: 1 } にある場合、次のようになります。
シャードキーが欠落しているドキュメント | 同じ範囲に該当 |
|---|---|
|
|
|
|
|
|
読み取り操作および書き込み操作と欠落しているシャードキー フィールド
シャードキー フィールドが欠落しているドキュメントを対象とするには、シャードキー フィールドに { $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で次の操作を使用できます。
コマンド | 方式 | 説明 |
|---|---|---|
で更新 |
| |
で更新 |
| |
| ||
|
例
locationフィールドでシャーディングされているsalesコレクションについて考えてみましょう。 コレクション内の一部のドキュメントには、 locationフィールドがありません。 欠落しているフィールドは、フィールドの null 値と同じとみなされます。 これらのフィールドを明示的にnullに設定するには、次のコマンドを実行します。
db.sales.updateOne( { _id: 12345, location: null }, { $set: { location: null } } )
欠落しているシャードキー フィールドをdb.collection.updateOne()または 1 つのドキュメントのみを明示的に更新する別のメソッドで設定する場合、更新は次のいずれかの要件を満たしている必要があります。
クエリのフィルターに、クエリ内の完全なシャードキーに対する等価条件が含まれている
クエリのフィルターに、_id の完全一致が含まれている
単一のシャードを対象としている更新