如何更改分片键

时间:2011-07-08 09:40:47

标签: mongodb sharding

我知道无法更改分片键。 但是,当我设置错误的分片键时,如何更改它?

4 个答案:

答案 0 :(得分:23)

转储您分片的集合..再次导入它..设置新的分片键。

答案 1 :(得分:12)

转储集合

mongodump --host <hostname> --port <port> --collection <collection_name> --db <db_name>

打开mongos并删除数据库或集合(如果你有超过1个集合)

mongo --host <hostname> --port <port>
show dbs
use <db_name>
db.dropDatabase() //it's only if you hade ONE database in db
exit

导入数据库

mongorestore --host <hostname> --port <port> --collection <collection_name> --db <db_name> <path to <collection_name>.bson>

打开mongos和碎片

mongo --host <hostname> --port <port>
sh.status() (only to understand what is happen)
sh.enableSharding("<db_name>")
sh.shardCollection("<db_name>.<collection_name>",<shard key>,<option>)
这样的事情 附:您必须在集合中具有分片键的索引。搜索:“ensureIndex()”

答案 2 :(得分:1)

感谢您的流程

我正在使用MongoDB 3.0和:

  1. mongoimport不是导入使用mongodump转储的数据库的工具。
  2. mongorestore使用完全相同的参数
  3. 工作正常

    此致

答案 3 :(得分:-1)

这很简单,使用remove + insert而不是更新。

var buf = db.col.findOne({'_id': ObjectId(<id>)});
buf['key'] = 'new key';
db.col.remove({'_id': ObjectId(<id>)});
db.col.insert(buf); //_id does not change!