{% include anchor.html edit="true" title="Explain index" hash="explain_index" %}

{% highlight js %}
db.explain(request [, callback])
{% endhighlight %}

Explain the query plan for a given query

{% include alert/start.html variant="info"%}
{% markdown %}

**pouchdb-find plugin needed:** This API requires the `pouchdb-find` plugin. See
[Mango queries](/guides/mango-queries.html) for installation instructions.

{% endmarkdown %}
{% include alert/end.html%}

#### Example Usage:

{% include code/start.html id="explain_idx" type="callback" %}
{% highlight js %}
db.explain({
  selector: {
    name: 'Mario',
    series: "mario"
  },
  fields: ['_id', 'name'],
  sort: ['name']
}, function (err, explanation) {
  if (err) { return console.log(err); }
  // view explanation
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="explain_idx" type="async" %}
{% highlight js %}
try {
  const explanation = await db.explain({
    selector: {
      name: 'Mario',
      series: "mario"
    },
    fields: ['_id', 'name'],
    sort: ['name']
  });
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="explain_idx" type="promise" %}
{% highlight js %}
db.explain({
  selector: {
    name: 'Mario',
    series: "mario"
  },
  fields: ['_id', 'name'],
  sort: ['name']
}).then(function (explanation) {
  // view explanation
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

#### Example Response:

{% highlight js %}
{
  "dbname": "database-name"
  "index": {
    "ddoc": "_design/design-doc-name",
    "name": "index-name",
    "type": "json",
    "def": {
      "fields": [
        {
          "name": "asc"
        },
        {
          "series": "asc"
        }
      ]
    }
  },
  "selector": {
    "$and": [
      {
        "name": {
          "$eq": "mario"
        }
      },
      {
        "series": {
          "$eq": "mario"
        }
      }
    ]
  },
  "opts": {
    "use_index": [],
    "bookmark": "nil",
    "limit": 25,
    "skip": 0,
    "sort": {"name": "asc"},
    "fields": [
      "_id"
    ],
    "r": [
      49
    ],
    "conflicts": false
  },
  "limit": 10,
  "skip": 1,
  "fields": [
    "_id"
  ],
  "range": {
    "start_key": [
      "mario",
      "mario"
    ],
    "end_key": [
      "mario",
      "mario",
      {}
    ]
  }
};
{% endhighlight %}
