Rango de partición y campos de clave de partición faltantes
Los campos de clave de partición que faltan caen dentro del mismo rango de partición que las claves de partición con valores nulos. Por ejemplo, si la clave de partición está en los campos { x: 1, y: 1 }, entonces:
Documento sin clave de partición | Cae en el mismo rango que |
|---|---|
|
|
|
|
|
|
Operaciones de lectura/guardado y campos de clave de partición faltantes
Para dirigirse a documentos con campos de clave de partición faltantes, se puede utilizar la condición de filtro { $exists: false } en los campos de clave de partición. Por ejemplo, si la clave de partición está en los campos { x: 1, y: 1 }, se pueden encontrar los documentos con campos de clave de partición faltantes ejecutando esta query:
db.shardedcollection.find( { $or: [ { x: { $exists: false } }, { y: { $exists: false } } ] } )
Si se especifica una condición de filtro de coincidencia exacta nula (p. ej. { x: null }), el filtro coincide tanto con aquellos documentos que tienen campos de clave de partición faltantes como con aquellos que tienen campos de clave de partición establecidos en null.
Algunas operaciones de escritura, como una escritura con una especificación de upsert, requieren una coincidencia exacta en la clave de fragmentación. En esos casos, para dirigirse a un documento que carece de la clave de fragmentación, incluya otra condición de filtro además de la coincidencia exacta null. Por ejemplo:
{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key
Establezca los campos de clave de partición que faltan
Si tienes campos de clave de partición faltantes, puedes establecer el campo de clave de partición en null. Si deseas establecer el campo de clave de partición faltante en un valor que no seanull, consulta Cambiar el valor de la clave de partición de un documento.
Para realizar la actualización, puede usar las siguientes operaciones en un mongos:
Comando | Método | Descripción |
|---|---|---|
Actualizar con |
| |
Actualizar con |
| |
| ||
|
Ejemplo
Considera una colección de sales que esté particionada por el campo location. Algunos documentos de la colección no tienen el campo location. Un campo ausente se considera igual que un valor nulo para el campo. Para establecer explícitamente estos campos en null, ejecuta el siguiente comando:
db.sales.updateOne( { _id: 12345, location: null }, { $set: { location: null } } )
Al establecer campos de clave de partición faltantes con db.collection.updateOne() u otro método que actualice explícitamente solo un documento, la actualización debe cumplir uno de los siguientes requisitos:
el filtro de la query contiene una condición de igualdad en la clave de partición completa en la query
el filtro de la query contiene una coincidencia exacta en _id
la actualización está dirigida a una única partición