Introduction à MongoDB

Utilisation

Lorsqu'on recherche un document donné, il est possible de connaître la stratégie effective permettant à MongoDB de le retrouver grâce à la commande explain().

Dans ce cas MongoDB renvoie un document spécifique qui détaille la recherche avec notamment les index utilisés, le nombre de documents parcourus ou encore le temps global de la requête. C'est très pratique quand on veut optimiser ses requêtes ou bien observer l'utilité de ses index.

Exemple

> db.movies.find({$and: [{"actors.first_name": "Bruce"}, {"actors.last_name": "Willis"}]}).explain("executionStats")

Voici une partie du résultat obtenu avec les index créés précédemment :

"executionStats": {
  "executionSuccess": true,
  "nReturned": 7,
  "executionTimeMillis": 0,
  "totalKeysExamined": 7,
  "totalDocsExamined": 7,
  "executionStages": {
    "stage": "KEEP_MUTATIONS",
    "nReturned": 7,
    "executionTimeMillisEstimate": 0,
    "works": 8,
    "advanced": 7,
    "needTime": 0,
    "needFetch": 0,
    "saveState": 0,
    "restoreState": 0,
    "isEOF": 1,
    "invalidates": 0,
    "inputStage": {
      "stage": "FETCH",
      "filter": {
        "actors.first_name": {
          "$eq": "Bruce"
        }
      },
      "nReturned": 7,
      "executionTimeMillisEstimate": 0,
      "works": 8,
      "advanced": 7,
      "needTime": 0,
      "needFetch": 0,
      "saveState": 0,
      "restoreState": 0,
      "isEOF": 1,
      "invalidates": 0,
      "docsExamined": 7,
      "alreadyHasObj": 0,
      "inputStage": {
        "stage": "IXSCAN",
        "nReturned": 7,
        "executionTimeMillisEstimate": 0,
        "works": 8,
        "advanced": 7,
        "needTime": 0,
        "needFetch": 0,
        "saveState": 0,
        "restoreState": 0,
        "isEOF": 1,
        "invalidates": 0,
        "keyPattern": {
          "actors.last_name": 1,
          "actors.first_name": -1
        },
        "indexName": "actor",
        "isMultiKey": true,
        "direction": "forward",
        "indexBounds": {
          "actors.last_name": [
            "[\"Willis\", \"Willis\"]"
          ],
          "actors.first_name": [
            "[MaxKey, MinKey]"
          ]
        },
        "keysExamined": 7,
        "dupsTested": 7,
        "dupsDropped": 0,
        "seenInvalidated": 0,
        "matchTested": 0
      }
    }
  }
}