使用mongodb案例句子正则表达式与案例因果指数

时间:2018-01-16 20:44:44

标签: regex mongodb performance

mongo正则表达式无视我的索引?我有一个案例insentive索引,但通过外观我的正则表达式搜索识别它并忽略它。

db.getCollection("myCol").find({ value: /^mysearchVal/i }}).explain(...)

我总共有95个,708个文档。

输出:

{
  "queryPlanner": {
    "plannerVersion": 1,
    "namespace": "myDb.myCol",
    "indexFilterSet": false,
    "parsedQuery": {
        "Value": {
            "$regex": "^mysearchVal",
            "$options": "i"
        }
    },
    "winningPlan": {
        "stage": "FETCH",
        "filter": {
            "Value": {
                "$regex": "^mysearchVal",
                "$options": "i"
            }
        },
        "inputStage": {
            "stage": "IXSCAN",
            "keyPattern": {
                "Value": 1
            },
            "indexName": "value_case_insensitive_and_unique",
            "collation": {
                "locale": "en",
                "caseLevel": false,
                "caseFirst": "off",
                "strength": 2,
                "numericOrdering": false,
                "alternate": "non-ignorable",
                "maxVariable": "punct",
                "normalization": false,
                "backwards": false,
                "version": "57.1"
            },
            "isMultiKey": false,
            "multiKeyPaths": {
                "Value": []
            },
            "isUnique": true,
            "isSparse": false,
            "isPartial": false,
            "indexVersion": 2,
            "direction": "forward",
            "indexBounds": {
                "Value": [
                    "[\"\", {})",
                    "[/^mysearchVal/i, /^mysearchVal/i]"
                ]
            }
        }
    },
    "rejectedPlans": []
},
"executionStats": {
    "executionSuccess": true,
    "nReturned": 1,
    "executionTimeMillis": 1447,
    "totalKeysExamined": 95708,
    "totalDocsExamined": 95708,
    "executionStages": {
        "stage": "FETCH",
        "filter": {
            "Value": {
                "$regex": "^mysearchVal",
                "$options": "i"
            }
        },
        "nReturned": 1,
        "executionTimeMillisEstimate": 1270,
        "works": 95709,
        "advanced": 1,
        "needTime": 95707,
        "needYield": 0,
        "saveState": 785,
        "restoreState": 785,
        "isEOF": 1,
        "invalidates": 0,
        "docsExamined": 95708,
        "alreadyHasObj": 0,
        "inputStage": {
            "stage": "IXSCAN",
            "nReturned": 95708,
            "executionTimeMillisEstimate": 596,
            "works": 95709,
            "advanced": 95708,
            "needTime": 0,
            "needYield": 0,
            "saveState": 785,
            "restoreState": 785,
            "isEOF": 1,
            "invalidates": 0,
            "keyPattern": {
                "Value": 1
            },
            "indexName": "value_case_insensitive_and_unique",
            "collation": {
                "locale": "en",
                "caseLevel": false,
                "caseFirst": "off",
                "strength": 2,
                "numericOrdering": false,
                "alternate": "non-ignorable",
                "maxVariable": "punct",
                "normalization": false,
                "backwards": false,
                "version": "57.1"
            },
            "isMultiKey": false,
            "multiKeyPaths": {
                "Value": []
            },
            "isUnique": true,
            "isSparse": false,
            "isPartial": false,
            "indexVersion": 2,
            "direction": "forward",
            "indexBounds": {
                "Value": [
                    "[\"\", {})",
                    "[/^mysearchVal/i, /^mysearchVal/i]"
                ]
            },
            "keysExamined": 95708,
            "seeks": 1,
            "dupsTested": 0,
            "dupsDropped": 0,
            "seenInvalidated": 0
        }
    },
    "allPlansExecution": []
  },
  "ok": 1.0
}

输出显示检查了95,708个密钥和文档,返回了1个doc。真?该指数适用于这种情况还是我错过了一两点?

1 个答案:

答案 0 :(得分:0)

  

不区分大小写的正则表达式查询一般不能使用   有效的索引。 $ regex实现不支持排序规则   并且无法使用不区分大小写的索引。

https://docs.mongodb.com/manual/reference/operator/query/regex/#index-use