【发布时间】:2011-10-01 03:30:46
【问题描述】:
我知道不可能更改分片键。 但是,当我设置了不正确的分片键时,如何更改呢?
【问题讨论】:
我知道不可能更改分片键。 但是,当我设置了不正确的分片键时,如何更改呢?
【问题讨论】:
很简单,用remove + insert代替update。
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!
【讨论】:
转储收集
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>)
类似的东西 p.s.您必须在集合中有分片键的索引。搜索:“ensureIndex()”
【讨论】:
感谢您的过程
我正在使用 MongoDB 3.0 并且:
问候
【讨论】:
转储你分片的集合..再次导入..设置新的分片键。
【讨论】: