Definición
mergeChunksPara una colección particionada,
mergeChunkscombina los adyacentes fragmento rangos en una partición en un solo fragmento. Emitir el comandomergeChunksen la base de datosadmindesde una instancia demongos.
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Sintaxis
El comando tiene la siguiente sintaxis:
db.adminCommand( { mergeChunks: <namespace>, bounds : [ { <shardKeyField>: <minFieldValue> }, { <shardKeyField>: <maxFieldValue> } ] } )
Para las claves de fragmento compuestas, debe incluir la clave de fragmento completa en la bounds especificación. Por ejemplo, si la clave de fragmento { x: 1, y:
1 } es, tiene el siguientemergeChunks formato:
db.adminCommand( { mergeChunks: <namespace>, bounds: [ { x: <minValue>, y: <minValue> }, { x: <maxValue>, y: <maxValue> } ] } )
Campos de comandos
El comando toma los siguientes campos:
Campo | Tipo | Descripción |
|---|---|---|
| namespace | El namespace completamente calificado de la colección donde existen ambos fragmentos. Los namespaces toman la forma de |
| arreglo | Un arreglo que contiene los valores mínimo y máximo de clave del nuevo fragmento. |
Control de acceso
En implementaciones que se ejecutan con authorization, el rol integrado clusterManager proporciona los privilegios necesarios.
Comportamiento
Nota
Use solo en circunstancias especiales.mergeChunks Por ejemplo, al limpiar su clúster fragmentado después de eliminar muchos documentos.
Para fusionar exitosamente los fragmentos, lo siguiente debe ser cierto:
En el campo
bounds,<minkey>y<maxkey>deben corresponder a los límites inferior y superior de los fragmentos a fusionar.Los fragmentos deben residir en la misma partición.
Los fragmentos deben ser contiguos.
mergeChunks retorna un error si estas condiciones no se cumplen.
Mensajes de Devolución
En caso de éxito, mergeChunks devuelve este documento:
{ "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : Long("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }
Otra operación en curso
mergeChunks devuelve el siguiente mensaje de error si hay otra operación de metadatos en curso en la chunks colección:
errmsg: "The collection's metadata lock is already taken."
Si otro proceso, como el balanceador, cambia los metadatos mientras se está ejecutando, podría mergeChunks mergeChunks aparecer este error. Puede reintentar la operación sin consecuencias.
Fragmentos en diferentes particiones
Si los fragmentos de entrada no están en la misma partición, mergeChunks devuelve un error similar al siguiente:
{ "ok" : 0, "errmsg" : "could not merge chunks, collection test.users does not contain a chunk ending at { username: \"user63169\" }", "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : Long("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }
Fragmentos no contiguos
Si los fragmentos de entrada no son contiguos, mergeChunks devuelve un error similar a lo siguiente:
{ "ok" : 0, "errmsg" : "could not merge chunks, collection test.users has more than 2 chunks between [{ username: \"user29937\" }, { username: \"user49877\" })" "$clusterTime" : { "clusterTime" : Timestamp(1510767081, 1), "signature" : { "hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="), "keyId" : Long("6488693018630029321") } }, "operationTime" : Timestamp(1510767081, 1) }