2つのコレクション(c1とc2)を含むmongoのdb( "mydb")があります。 c1は既にハッシュ・シャードされています。私は同じ方法で2番目のコレクションをシャードします。私は次のエラーを取得する: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}})
問題:今、私のコレクションは、何かにシャードでハッシュ化されていないと私はそれを変更することはできません(エラー:「すでにシャード」)
- 私が何をしたかと間違っていましたか?
- どうすればこの問題を解決できますか?
事前に感謝
トーマス
'ensureIndex({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