Mongo聚合性能

时间:2018-02-27 22:32:04

标签: mongodb performance aggregation-framework

我是mongo的新手,以下查询执行速度非常慢,记录设置超过2百万条记录

查询



 db.testCollection.aggregate({
     $match: {
         active: {
             $ne: false
         }
     }
 }, {
     $group: {
         _id: {
             productName: "$productName",
             model: "$model",
             version: "$version",
             uid: "$uid"
         },
         total: {
             $sum: 1
         }
     }
 }, {
     $project: {
         total: 1,
         model: "$_id.model",
         version: "$_id.version",
         uid: "$_id.uid",
         productName: "$_id.productName"
     }
 }, {
     $sort: {
         model: 1
     }
 })




解释()

{
"stages" : [
    {
        "$cursor" : {
            "query" : {
                "active" : {
                    "$ne" : false
                }
            },
            "fields" : {
                "version" : 1,
                "productName" : 1,
                "model" : 1,
                "uid" : 1,
                "_id" : 0
            },
            "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "fms2.device",
                "indexFilterSet" : false,
                "parsedQuery" : {
                    "$nor" : [
                        {
                            "active" : {
                                "$eq" : false
                            }
                        }
                    ]
                },
                "winningPlan" : {
                    "stage" : "FETCH",
                    "inputStage" : {
                        "stage" : "IXSCAN",
                        "keyPattern" : {
                            "active" : 1
                        },
                        "indexName" : "active",
                        "isMultiKey" : false,
                        "multiKeyPaths" : {
                            "active" : [ ]
                        },
                        "isUnique" : false,
                        "isSparse" : false,
                        "isPartial" : false,
                        "indexVersion" : 2,
                        "direction" : "forward",
                        "indexBounds" : {
                            "active" : [
                                "[MinKey, false)",
                                "(false, MaxKey]"
                            ]
                        }
                    }
                },
                "rejectedPlans" : [ ]
            }
        }
    },
    {
        "$group" : {
            "_id" : {
                "productName" : "$productName",
                "model" : "$model",
                "version" : "$version",
                "uid" : "$uid"
            },
            "total" : {
                "$sum" : {
                    "$const" : 1
                }
            }
        }
    },
    {
        "$project" : {
            "_id" : true,
            "total" : true,
            "model" : "$_id.model",
            "version" : "$_id.version",
            "uid" : "$_id.uid",
            "productName" : "$_id.productName"
        }
    },
    {
        "$sort" : {
            "sortKey" : {
                "model" : 1
            }
        }
    }
],
"ok" : 1

}

有没有办法更优化此查询?我也查看了https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/,但大多数陈述的建议都不适用于此查询。

不确定是否重要,此聚合的结果最终只有20-30条记录。

0 个答案:

没有答案