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