Почему индекс может быть автоматически преобразован в multikey в MonogoDB? - PullRequest
0 голосов
/ 14 апреля 2020

Имеется одна пустая коллекция testdoc с указанным ниже индексом

`db.testdoc.createIndex({"ratings.score": 1});`

Затем вставьте один документ db.testdoc.insert({_id: 3, ratings: {score: 23}})

Для запроса db.testdoc.find({"ratings.score": 23}).explain() и план выигрыша

        "winningPlan" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "ratings.score" : 1
                },
                "indexName" : "ratings.score_1",
                "isMultiKey" : false,
                "multiKeyPaths" : {
                    "ratings.score" : [ ]
                },
                "isUnique" : false,
                "isSparse" : false,
                "isPartial" : false,
                "indexVersion" : 2,
                "direction" : "forward",
                "indexBounds" : {
                    "ratings.score" : [
                        "[23.0, 23.0]"
                    ]

isMultiKey неверно.

Однако, после вставки этого документа db.testdoc.insert({_id: 1,item: "ABC",ratings: [ { score: 2, by: "mn" }, { score: 9, by: "anon" } ]})

План выигрыша по вышеуказанному запросу

        "winningPlan" : {
            "stage" : "FETCH",
            "inputStage" : {
                "stage" : "IXSCAN",
                "keyPattern" : {
                    "ratings.score" : 1
                },
                "indexName" : "ratings.score_1",
                "isMultiKey" : true,
                "multiKeyPaths" : {
                    "ratings.score" : [
                        "ratings"
                    ]
                },
                "isUnique" : false,
                "isSparse" : false,
                "isPartial" : false,
                "indexVersion" : 2,
                "direction" : "forward",
                "indexBounds" : {
                    "ratings.score" : [
                        "[23.0, 23.0]"
                    ]
                }

. isMultiKey теперь верно.

Почему индекс может быть изменен на isMultiKey при изменении структуры документа?

Версия MongoDB: 4.2.5

1 Ответ

1 голос
/ 14 апреля 2020

По умолчанию, если вы создаете индекс для существующего поля массива, MongoDB создаст многоключевой индекс т.е. несколько индексных ключей для каждого элемента в массиве. Допустим, в вашем случае, даже если вы изначально создали нормальный индекс для одного поля и позже, если вы добавите новый документ с индексированным полем в виде массива, MongoDB автоматически преобразует существующий индекс в многоключевой index, поскольку массив вставляется для этого конкретного поля.

Ref: multikey-index

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...