我有一个mongodb集合,其中包含以下架构:
{
"description": "some arbitrary text",
"type": "TYPE", # there are a lot of different types
"status": "STATUS" # there are a few different statuses
}
我还有两个索引:“type”和“status”。
现在我运行一个查询:
db.obj.count({
type: { $in: ["SOME_TYPE"] },
status: { $ne: "SOME_STATUS" },
description: { $regex: /.*/ }
})
MongoDB选择使用“status”索引,而“type”会更好:
"query": {
"count": "obj",
"query": {
"description": Regex('.*', 2),
"status": {
"$ne": "SOME_STATUS"
},
"type": {
"$in": [
"SOME_TYPE"
]
}
}
},
"planSummary": "IXSCAN { status: 1 }"
我知道我可以使用hint
指定要使用的索引,但我有不同的查询(应该使用不同的索引),我无法对其中的每一个进行注释。
据我所知,一个可能的解决方案是禁止对包含status: { $ne: "SOME_STATUS" }
条件的所有查询使用“status”索引。
有办法吗?或许我想要一些奇怪的东西并且有更好的方法?