У меня есть db ("mydb") на mongo, который содержит 2 коллекции (c1 и c2). c1 уже hash sharded. Я хочу также очертить вторую коллекцию. Я получаю следующее сообщение об ошибке:не может осколоть коллекцию на mongodb
use mydb
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})
{
"proposedKey" : {
"LOG_DATE" : "hashed"
},
"curIndexes" : [
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydb.c1",
"name" : "_id_"
}
],
"ok" : 0,
"errmsg" : "please create an index that starts with the shard key before sharding."
Так что я сделал
db.c2.ensureIndex({LOG_DATE: 1})
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})
ту же ошибку, но это показывает новый индекс.
"proposedKey" : {
"LOG_DATE" : "hashed"
},
"curIndexes" : [
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "mydb.c2",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"LOG_DATE" : 1
},
"ns" : "mydb.c2",
"name" : "LOG_DATE_1"
}
],
"ok" : 0,
"errmsg" : "please create an index that starts with the shard key before sharding."
Просто, чтобы быть уверенным, я бегу:
db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "mydb.c1", "name" : "_id_" }
{ "v" : 1, "key" : { "timestamp" : "hashed" }, "ns" : "mydb.c1", "name" : "timestamp_hashed" }
{ "v" : 1, "key" : { "_id" : 1 }, "ns": "mydb.c2", "name" : "_id_" }
{ "v" : 1, "key" : { "LOG_DATE" : 1 }, "ns" : "mydb.c2", "name" : "LOG_DATE_1" }
Я снова попробовать одни и те же команды на администратора и он терпит неудачу с такой же ошибкой.
Затем я попробовал администратора без «хэширования», и это сработало.
db.runCommand({shardCollection: "mydb.c2", key: {"LOG_DATE": 1}})
Проблема: Теперь моя коллекция sharded на то, что не хэшируются и я не могу изменить его (ошибка: «уже sharded»)
- Что с того, что я сделал?
- Как это исправить?
Заранее спасибо
Томас
'securityIndex ({LOG_DATE:" hashed "})' http://docs.mongodb.org/manual/tutorial/create-a-hashed-index/, вы не можете изменить свой ключ осколка, вам нужно будет повторить коллекция – Sammaye
Я удалил коллекцию и переделал свою коллекцию, но я не могу ее снова очертить. Как удалить информацию о шарах, прежде чем делать collection.remove()? – Thomas
removeShard должен быть в состоянии избавиться от метаданных: http://docs.mongodb.org/manual/reference/command/removeShard/#dbcmd.removeShard – Sammaye