Question: I have 5 shards and I want to merge them into a single shard. Each shard has about 30GB data. I can use "removeShard" command to remove them one by one. But it's wasteful because when I am removing the shards one by one, the data has to be re-distributed multiple times. It will be more efficient to force data to move to a single shard that I will keep at the end.

Answer: 
Basically, the [moveChunk](http://docs.mongodb.org/manual/reference/command/moveChunk/) command is used for manual chunk migration.

Using the `config` database, you can use a script similar to the bellow. 

**Note that you have to turn off the balancer first**.

```
var query = {"shard" : {$ne : "DESTINATION_SHARD_ID"} , "ns" : "YOUR_NAMESPACE"}
var cursor = db.chunks.find(query);

cursor.forEach(function(d) {
    sh.moveChunk("YOUR_NAMESPACE", { "_id" : d.min._id }, "DESTINATION_SHARD_ID")
});

```

Where:

* `DESTINATION_SHARD_ID` is the target shard id
* `YOUR_NAMESPACE` is the collection namespace in the format: [db].[collection]

This may take very long, depending on the number of chunks, and how your target machine can cope with writes. You can also throttle the operation. For example, a cron job which transfers 10 chunks each day((by adding `limit(50)` to the query)) during off-peak hours.

Once shards are drained, you then can issue the (still necessary) `removeShard`s commands.
There are no quick solutions here. You can move the chunks manually as pointed out in the first answer, but there is another option. This won't be any faster, since no matter what you do at present the balancer (which moves the chunks for you) will still only ever move one chunk at at a time.

You could use [tag aware sharding](http://docs.mongodb.org/manual/core/tag-aware-sharding/) and tag the one shard you wish to have left for your entire data set. Tags are evaluated right after draining shards when it comes to balancing, so a tag which dictates that your entire data set should be on a single shard would be approximately equivalent to setting all shards to drain. Once complete, you could then issue the commands to remove the shards with all the work having been done.

Given the overhead, and single threaded nature of the balancer, you may want to consider using [mongodump](http://docs.mongodb.org/manual/reference/program/mongodump/) to dump out the entire data set and then restore to the single shard instead (assuming you can take the down time and have sufficient space).