Docs Menu
Docs Home
/
MongoDB Manual
/ / /

moveChunk

On this page

  • Definition
  • Compatibility
  • Considerations
  • Behavior
moveChunk

Internal administrative command. Moves chunks between shards. Issue the moveChunk command via a mongos instance while using the admin database. Use the following forms:

Tip

In mongosh, this command can also be run through the sh.moveChunk() helper method.

Helper methods are convenient for mongosh users, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.

db.adminCommand(
{
moveChunk: <namespace>,
find: <query>,
to: <string>,
forceJumbo: <boolean>,
_secondaryThrottle: <boolean>,
writeConcern: <document>,
_waitForDelete: <boolean>
}
)

Alternatively:

db.adminCommand(
{
moveChunk: <namespace>,
bounds: <array>,
to: <string>,
forceJumbo: <boolean>,
_secondaryThrottle: <boolean>,
writeConcern: <document>,
_waitForDelete: <boolean>
}
)

The moveChunk command has the following fields:

Field
Type
Description

moveChunk

string

The namespace of the collection where the chunk exists. Specify the collection's full namespace, including the database name.

find

document

An equality match on the shard key that specifies the shard-key value of the chunk to move. Specify either the bounds field or the find field but not both. Do not use the find field to select chunks in collections that use a hashed shard key.

bounds

array

The bounds of a specific chunk to move. The array must consist of two documents that specify the lower and upper shard key values of a chunk to move. Specify either the bounds field or the find field but not both. Use bounds to select chunks in collections that use a hashed shard key.

The value of bounds takes the following form:

[ { hashedField : <minValue> } ,
{ hashedField : <maxValue> } ]

to

string

The name of the destination shard for the chunk.

boolean

Optional. A flag that determines if the command can move a chunk that is too large to migrate. The chunk may or may not be labeled as jumbo.

  • If true, the command can move the chunk.

  • If false, the command cannot move the chunk.

The default is false.

WARNING:

The moveChunk command with forceJumbo=true blocks write operations on the collection.

This option causes the shard to migrate chunks even when they are larger than the configured chunk size. The collection remains unavailable for writes for the duration of the migration.

To migrate these large chunks without this long blocking period, see Balance Chunks that Exceed Size Limit instead.

_secondaryThrottle

boolean

Optional. Defaults to false.

  • If true, then by default, each document move during chunk migration propagates to at least one secondary before the balancer proceeds with the next document. This is equivalent to a write concern of { w: 2 }.

    Use the writeConcern option to specify a different write concern.

  • If false, the balancer does not wait for replication to a secondary and instead continues with the next document.

For more information, see Secondary Throttle.

writeConcern

document

Required if _secondaryThrottle is true.

A document containing the write concern that the _secondaryThrottle uses to wait for secondaries during the chunk migration.

If _secondaryThrottle is false, the writeConcern field is ignored.

_waitForDelete

boolean

Optional. Internal option for testing purposes. The default is false. If set to true, the delete phase of a moveChunk operation blocks.

To learn how chunks move between shards, see Chunk Migration.

Tip

See also:

This command is available in deployments hosted in the following environments:

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

Important

This command is not supported in serverless instances. For more information, see Unsupported Commands.

Only use the moveChunk in special circumstances such as preparing your sharded cluster for an initial ingestion of data, or a large bulk import operation. In most cases allow the balancer to create and balance chunks in sharded clusters. See Create Chunks in a Sharded Cluster for more information.

moveChunk requires that all indexes exist on the target (i.e. to ) shard before migration and returns an error if a required index does not exist.

moveChunk returns the following error message if another metadata operation is in progress on the chunks collection:

errmsg: "The collection's metadata lock is already taken."

If another process, such as a balancer process, changes meta data while moveChunk is running, you may see this error. You may retry the moveChunk operation without side effects.

Starting in MongoDB 5.0, you can set the maxCatchUpPercentageBeforeBlockingWrites to specify the maximum allowed percentage of data not yet migrated during a moveChunk operation when compared to the total size (in MBs) of the chunk being transferred.

Back

listShards