Подтвердить что ты не робот

Как изменить ключ осколка

Я знаю, что невозможно изменить осколочный ключ. Но когда я установил неправильный ключ осколка, как изменить это?

4b9b3361

Ответ 1

сбрасывать собранную вами коллекцию.. импортировать ее снова.. установить новый ключ осколка.

Ответ 2

сборка дампов

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 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>

открытые монго и осколки

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>)

что-то вроде этого постскриптум У вас должен быть индекс в коллекции для ключа осколка. Поиск: "sureIndex()"

Ответ 3

Спасибо за ваш процесс

Я работаю с MongoDB 3.0 и:

  • mongoimport не является инструментом для импорта db, сбрасываемого с помощью mongodump.
  • Это mongorestore, который отлично работает с точно такими же аргументами

Привет

Ответ 4

Это очень просто, используйте 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!