我在 mongo 上有一个包含 2 个集合(c1 和 c2)的数据库(“mydb”)。c1 已经被哈希分片。我想以同样的方式分割第二个集合。我收到以下错误:
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" }
我在管理员上再次尝试相同的命令,但失败并出现相同的错误。
然后我在没有“散列”的情况下尝试了 admin 并且它有效。
db.runCommand({shardCollection: "mydb.c2", key: {"LOG_DATE": 1}})
问题:现在我的收藏被分片在没有散列的东西上,我不能改变它(错误:“已经分片”)
- 我做错了什么?
- 我怎样才能解决这个问题 ?
提前致谢
托马斯