Rango de partición y campos de clave de partición faltantes
Los campos clave de partición faltantes caen dentro del mismo rango de fragmento 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 }y luego:
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 dirigir documentos con campos de clave de partición faltantes, se puede utilizar el
{ $exists: false } condición de filtro en los campos de la clave de partición. Por ejemplo, si la clave de partición está en los campos { x: 1, y: 1
}, puedes encontrar los document 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 coincidencia exacta de filtro (por ejemplo, { x: null
}), el filtro coincide ambos documentos con campos de clave de partición faltantes y aquellos con 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 |
|---|---|---|
update with multi: true |
| |
update with multi: false |
| |
| ||
|
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