2016-06-23 7 views
0

Я использую данные весны mongodb, в которых хочу, чтобы запрос агрегации реализовал то, что я использую MongoTemplate с методом агрегации. Когда я отслеживаю журнал, он показывает запрос следующим образом:План выполнения агрегированного запроса в MongoTempate с данными Spring mongodb

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}}}} 

Я хочу знать план выполнения этого запроса. Как узнать, используются ли мои индексы во время этого запроса?

ответ

1

Обратите внимание, что для выполнения нижеследующих шагов вам нужен рабочий агрегированный запрос, который может понять оболочка mongo.

Выполните следующие действия: -

1) Перейти к Монго оболочки 2) Выполните команду использовать, чтобы перейти к базе данных

use <database name> 

3) Execute ниже запрос. Я надеюсь, что общий запрос, упомянутый в потоке, синтаксически правильный. Также, пожалуйста, измените название коллекции соответственно в синтаксисе ниже.

db. yourCollectionName .explain(). Aggregate ({"stayRecord", "конвейер": [{"$ 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) На выходе вы найдете элемент «выигрышныйPlan». В атрибуте входного каскада («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]" 
          ] 
         } 
        } 
       } 
      } 
     }