0

次のような数百万のドキュメントのコレクションがあるとします。

{
    organization: ObjectId("6a55b2f1aae2fe0ddd525828"),
    updated_on: 2019-04-18 14:08:48.781Z
}

{organization: 1} と {updated_on: 1} の両方のキーの 2 つのインデックス

次のクエリは、返されるまでに時間がかかります。

db.getCollection('sessions').aggregate([
        {
                "$match" : {
                        "organization" : ObjectId("5a55b2f1aae2fe0ddd525827"),
                }
        },
        {
                "$sort" : {
                        "updated_on" : 1
                }
        }
])

注意すべきことの 1 つは、結果が 0 件の一致であることです。さらに調査すると、explain() のプランナーは実際に次を返します。

{
    "stage" : "FETCH",
    "filter" : {
        "organization" : {
            "$eq" : ObjectId("5a55b2f1aae2fe0ddd525827")
        }
    },
    "inputStage" : {
        "stage" : "IXSCAN",
        "keyPattern" : {
            "updated_on" : 1.0
        },
        "indexName" : "updated_on_1",
        "isMultiKey" : false,
        "multiKeyPaths" : {
            "updated_on" : []
        },
        "isUnique" : false,
        "isSparse" : false,
        "isPartial" : false,
        "indexVersion" : 2,
        "direction" : "forward",
        "indexBounds" : {
            "updated_on" : [ 
                "[MinKey, MaxKey]"
            ]
        }
    }
}
  • Mongo がこれらを 1 つのステージにまとめて、フィルタリングの前にすべてのドキュメントを並べ替えることにしたのはなぜですか?
  • どうすればそれを防ぐことができますか?
4

2 に答える 2