Mongodb复合索引未与查询一起使用

时间:2019-05-03 09:23:05

标签: mongodb indexing compound-index

您好,有人可以为我解释一下如何为该简单查询创建复合索引吗?

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

我已经完成了两个复合索引:

  1. userId:1 +结尾:1
  2. userId:1 +结尾:-1

,但查询不使用任何一个。该索引有什么问题?

这是describe()的结果

{
    "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 :(得分:0)

在查询解释结果中,您可以在winningPlan下看到“ indexName”:“ end”。 这意味着您的查询使用了带有end名称的索引。