Составной индекс Mongodb не используется с запросом - PullRequest
0 голосов
/ 03 мая 2019

Привет, кто-нибудь может объяснить, пожалуйста, как составить индекс для этого простого запроса?

find({
    "userId":{"$in":["5c778c4f52732c06d3384269","5b274b672a35d168960b1bd5","5bc43d6552732c527345c35d","58ec836e899753a22b95fb19"]},
    "end":{"$gte": ISODate('2019-05-03 11:05:00+02:00')}
})

Я сделал два составных индекса:

  1. ИД пользователя: 1 + конец: 1
  2. ИД пользователя: 1 + конец: -1

но запрос не использует ни одного из них. Что не так с этими показателями?

Вот результат объяснения ()

{
    "queryPlanner": {
        "plannerVersion": 1,
        "namespace": "WebApp.SessionLog",
        "indexFilterSet": false,
        "parsedQuery": {
            "$and": [
                {
                    "end": {
                        "$gte": ISODate("2019-05-03T07:05:00Z")
                    }
                },
                {
                    "userId": {
                        "$in": [
                            "58ec836e899753a22b95fb19",
                            "5b274b672a35d168960b1bd5",
                            "5bc43d6552732c527345c35d",
                            "5c778c4f52732c06d3384269"
                        ]
                    }
                }
            ]
        },
        "winningPlan": {
            "stage": "FETCH",
            "filter": {
                "userId": {
                    "$in": [
                        "58ec836e899753a22b95fb19",
                        "5b274b672a35d168960b1bd5",
                        "5bc43d6552732c527345c35d",
                        "5c778c4f52732c06d3384269"
                    ]
                }
            },
            "inputStage": {
                "stage": "IXSCAN",
                "keyPattern": {
                    "end": -1
                },
                "indexName": "end",
                "isMultiKey": false,
                "multiKeyPaths": {
                    "end": []
                },
                "isUnique": false,
                "isSparse": false,
                "isPartial": false,
                "indexVersion": 2,
                "direction": "forward",
                "indexBounds": {
                    "end": [
                        "[new Date(9223372036854775807), new Date(1556867100000)]"
                    ]
                }
            }
        },
        "rejectedPlans": [
            {
                "stage": "FETCH",
                "inputStage": {
                    "stage": "IXSCAN",
                    "keyPattern": {
                        "userId": 1,
                        "end": -1
                    },
                    "indexName": "userId_1_end_-1",
                    "isMultiKey": false,
                    "multiKeyPaths": {
                        "userId": [],
                        "end": []
                    },
                    "isUnique": false,
                    "isSparse": false,
                    "isPartial": false,
                    "indexVersion": 2,
                    "direction": "forward",
                    "indexBounds": {
                        "userId": [
                            "[\"58ec836e899753a22b95fb19\", \"58ec836e899753a22b95fb19\"]",
                            "[\"5b274b672a35d168960b1bd5\", \"5b274b672a35d168960b1bd5\"]",
                            "[\"5bc43d6552732c527345c35d\", \"5bc43d6552732c527345c35d\"]",
                            "[\"5c778c4f52732c06d3384269\", \"5c778c4f52732c06d3384269\"]"
                        ],
                        "end": [
                            "[new Date(9223372036854775807), new Date(1556867100000)]"
                        ]
                    }
                }
            },
            {
                "stage": "FETCH",
                "inputStage": {
                    "stage": "IXSCAN",
                    "keyPattern": {
                        "userId": 1,
                        "end": 1
                    },
                    "indexName": "userId_1_end_1",
                    "isMultiKey": false,
                    "multiKeyPaths": {
                        "userId": [],
                        "end": []
                    },
                    "isUnique": false,
                    "isSparse": false,
                    "isPartial": false,
                    "indexVersion": 2,
                    "direction": "forward",
                    "indexBounds": {
                        "userId": [
                            "[\"58ec836e899753a22b95fb19\", \"58ec836e899753a22b95fb19\"]",
                            "[\"5b274b672a35d168960b1bd5\", \"5b274b672a35d168960b1bd5\"]",
                            "[\"5bc43d6552732c527345c35d\", \"5bc43d6552732c527345c35d\"]",
                            "[\"5c778c4f52732c06d3384269\", \"5c778c4f52732c06d3384269\"]"
                        ],
                        "end": [
                            "[new Date(1556867100000), new Date(9223372036854775807)]"
                        ]
                    }
                }
            },
            {
                "stage": "FETCH",
                "filter": {
                    "end": {
                        "$gte": ISODate("2019-05-03T07:05:00Z")
                    }
                },
                "inputStage": {
                    "stage": "IXSCAN",
                    "keyPattern": {
                        "userId": 1
                    },
                    "indexName": "userId",
                    "isMultiKey": false,
                    "multiKeyPaths": {
                        "userId": []
                    },
                    "isUnique": false,
                    "isSparse": false,
                    "isPartial": false,
                    "indexVersion": 2,
                    "direction": "forward",
                    "indexBounds": {
                        "userId": [
                            "[\"58ec836e899753a22b95fb19\", \"58ec836e899753a22b95fb19\"]",
                            "[\"5b274b672a35d168960b1bd5\", \"5b274b672a35d168960b1bd5\"]",
                            "[\"5bc43d6552732c527345c35d\", \"5bc43d6552732c527345c35d\"]",
                            "[\"5c778c4f52732c06d3384269\", \"5c778c4f52732c06d3384269\"]"
                        ]
                    }
                }
            }
        ]
    },
    "serverInfo": {
        "host": "mongo1",
        "port": 9000,
        "version": "3.4.2",
        "gitVersion": "3f76e40c105fc223b3e5aac3e20dcd026b83b38b"
    },
    "ok": 1
}

вот пример документов:

{
    "_id": ObjectId("56c49c147569943e7d4e92f4"),
    "ip": "213.81.143.50",
    "count": 17,
    "end": ISODate("2014-12-02T08:39:56Z"),
    "userId": "546dda33899753840584752b",
    "date": ISODate("2014-12-02T08:36:47Z"),
    "logs": [
        {
            "parameters": {
                "action": "dashboard",
                "id": null,
                "package": ""
            },
            "ip": "213.81.143.50",
            "date": ISODate("2014-12-02T08:36:47Z"),
            "presenter": "Dashboard",
            "action": "dashboard"
        },
        {
            "parameters": {
                "action": "dashboard",
                "id": null,
                "backlink": ""
            },
            "ip": "213.81.143.50",
            "date": ISODate("2014-12-02T08:36:48Z"),
            "presenter": "Dashboard",
            "action": "dashboard"
        }
    ]
}

Спасибо.

PS: этот текст PS предназначен только для ошибки редактора Stackoverflow.

1 Ответ

0 голосов
/ 03 мая 2019

В результате запроса объяснения вы можете увидеть "indexName": "end" в winningPlan. Это означает, что ваш запрос использовал индекс с end именем.

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