MongoDB dataSize命令错误“找不到包含密钥模式的有效索引”

时间:2019-03-25 10:45:15

标签: mongodb

我们有两个MongoDB集群,它们彼此不交互。我们曾经运行dataSize命令(https://docs.mongodb.com/manual/reference/command/dataSize/)来记录用于每个指定ID的存储。两个集群都运行良好。最近,我们遇到了一个群集的辅助服务器故障,然后重新启动了该群集。从那时起,dataSize命令就停止了对该集群的工作。它返回“找不到包含密钥模式的有效索引”错误。

返回的错误示例:

rs0:PRIMARY> db.runCommand({ dataSize: "dudubots.channel_tdata", keyPattern: { "c_id_s": 1 }, min: { "c_id_s": 1 }, max: { "c_id_s": 4226 } });
{
    "estimate" : false,
    "ok" : 0,
    "errmsg" : "couldn't find valid index containing key pattern",
    "operationTime" : Timestamp(1553510158, 20),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1553510158, 20),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
            "keyId" : NumberLong(0)
        }
    }
}

另一个群集运行正常,没有错误:

rs0:PRIMARY> db.runCommand({ dataSize: "dudubots.channel_tdata", keyPattern: { "c_id_s": 1 }, min: { "c_id_s": 3015 }, max: { "c_id_s": 3017 } })
{
    "estimate" : false,
    "size" : 6075684,
    "numObjects" : 3778,
    "millis" : 1315,
    "ok" : 1
}
实际上,

字段 c_id_s 被设置为两个群集的索引。我们不明白为什么该群集无法运行命令。

1 个答案:

答案 0 :(得分:0)

我们发现了问题。索引实际上已更改。 dataSize命令要求索引为ASC,但我们已将一个群集更改为DSC。