我们有两个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 被设置为两个群集的索引。我们不明白为什么该群集无法运行命令。
答案 0 :(得分:0)
我们发现了问题。索引实际上已更改。 dataSize命令要求索引为ASC,但我们已将一个群集更改为DSC。