【问题标题】:Execution plan of aggregate query in MongoTempate with Spring data mongodbSpring Data mongodb在MongoTempate中聚合查询的执行计划
【发布时间】:2016-06-23 21:43:25
【问题描述】:

我正在使用 spring data mongodb,因为想要聚合查询来实现我正在使用带有聚合方法的 MongoTemplate。当我跟踪日志时,它显示如下查询:

find: track.$cmd { "aggregate" : "stayRecord" , "pipeline" : [ { "$match" : { "vehicleId" : { "$all" : [ 10]}}} , { "$match" : { "stayTime" : { "$gte" : { "$date" : "2016-06-20T18:30:00.000Z"}}}} , { "$match" : { "stayTime" : { "$lt" : { "$date" : "2016-06-21T18:30:00.000Z"}}}} , { "$group" : { "_id" : "$stayTime" , "count" : { "$sum" : 1}}}}

我想知道这个查询的执行计划。 如何确定在该查询期间是否使用了我的索引?

【问题讨论】:

    标签: mongodb spring-data-mongodb mongotemplate


    【解决方案1】:

    请注意,为了遵循以下步骤,您需要 mongo shell 可以理解的工作聚合查询。

    按照以下步骤操作:-

    1) 转到 mongo shell 2)执行use命令切换到你的数据库

    use <database name>
    

    3) 执行以下查询。我希望线程中提到的聚合查询在语法上是正确的。另外,请按以下语法相应更改集合名称

    db.yourCollectionName.explain().aggregate({ "stayRecord" , "pipeline" : [ { "$match" : { "vehicleId" : { "$all" : [ 10] }}} , { "$match" : { "stayTime" : { "$gte" : { "$date" : "2016-06-20T18:30:00.000Z"}}}} , { "$match" : { "stayTime" : { "$lt" : { "$date" : "2016-06-21T18:30:00.000Z"}}}} , { "$group" : { "_id" : "$stayTime" , "count" : { "$sum" : 1}}}});

    2) 在输出中,请找到“winningPlan”元素。在输入阶段 ("inputStage") 属性中,如果查询使用索引,它将显示值为 "IXSCAN" 和索引名称,如果查询使用索引。否则,它将显示 "COLLSCAN",这意味着查询使用了集合扫描(即未使用索引)。

    "winningPlan" : {
                "stage" : "LIMIT",
                "limitAmount" : 0,
                "inputStage" : {
                    "stage" : "SKIP",
                    "skipAmount" : 0,
                    "inputStage" : {
                        "stage" : "FETCH",
                        "filter" : {
                            "user.followers_count" : {
                                "$gt" : 1000
                            }
                        },
                        "inputStage" : {
                            "stage" : "IXSCAN",
                            "keyPattern" : {
                                "created_at" : -1
                            },
                            "indexName" : "created_at_-1",
                            "isMultiKey" : false,
                            "direction" : "backward",
                            "indexBounds" : {
                                "created_at" : [
                                    "[MinKey, MaxKey]"
                                ]
                            }
                        }
                    }
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2018-01-08
      • 2021-04-07
      • 1970-01-01
      • 2020-04-29
      • 2014-03-05
      相关资源
      最近更新 更多