Tôi có db ("mydb") trên mongo chứa 2 bộ sưu tập (c1 và c2). c1 đã bị băm. Tôi muốn phân tích một bộ sưu tập thứ hai theo cùng một cách. Tôi nhận được lỗi sau:không thể phân phát bộ sưu tập trên 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."
Vì vậy, tôi đã làm
db.c2.ensureIndex({LOG_DATE: 1})
sh.shardCollection("mydb.c2", {"LOG_DATE": "hashed"})
Cùng một lỗi nhưng nó cho thấy các chỉ số mới.
"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."
Chỉ để chắc chắn, tôi chạy:
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" }
tôi cố gắng một lần nữa các lệnh tương tự trên admin và nó không thành công với các lỗi tương tự.
Sau đó, tôi đã thử trên quản trị mà không bị "băm" và hoạt động.
db.runCommand({shardCollection: "mydb.c2", key: {"LOG_DATE": 1}})
Vấn đề: bây giờ bộ sưu tập của tôi là sharded vào cái gì mà không được băm và tôi không thể thay đổi nó (lỗi: "đã sharded")
- gì đó không ổn với những gì tôi đã làm?
- Làm cách nào để khắc phục sự cố này?
Cảm ơn trước
Thomas
'EnsureIndex ({LOG_DATE:" hashed "})' http://docs.mongodb.org/manual/tutorial/create-a-hashed-index/, bạn không thể thay đổi khóa phân đoạn của mình, bạn sẽ cần phải làm lại bộ sưu tập – Sammaye
Tôi đã xóa bộ sưu tập và xóa bộ sưu tập của mình nhưng tôi không thể phân phát lại. Làm thế nào để loại bỏ thông tin sharding trước khi thực hiện collection.remove()? – Thomas
removeShard sẽ có thể loại bỏ siêu dữ liệu: http://docs.mongodb.org/manual/reference/command/removeShard/#dbcmd.removeShard – Sammaye