{% include anchor.html edit="true" title="Query index" hash="query_index" %}

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

Query an index and return the list of documents that match the request.

{% 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="query_idx" type="callback" %}
{% highlight js %}
db.find({
  selector: {name: 'Mario'},
  fields: ['_id', 'name'],
  sort: ['name']
}, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx" type="async" %}
{% highlight js %}
try {
  var result = await db.find({
    selector: {name: 'Mario'},
    fields: ['_id', 'name'],
    sort: ['name']
  });
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx" type="promise" %}
{% highlight js %}
db.find({
  selector: {name: 'Mario'},
  fields: ['_id', 'name'],
  sort: ['name']
}).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

#### Example Response:

{% highlight js %}
{
  "docs": [
    {
      "_id": "mario",
      "name": "Mario"
    }
  ]
}
{% endhighlight %}

The above is a simple example. For an in-depth tutorial, please refer to
[the Mango guide](/guides/mango-queries.html).

### Options

* `selector` Defines a selector to filter the results. Required.
  * `$lt` Match fields "less than" this one.
  * `$gt` Match fields "greater than" this one.
  * `$lte` Match fields "less than or equal to" this one.
  * `$gte` Match fields "greater than or equal to" this one.
  * `$eq` Match fields equal to this one.
  * `$ne` Match fields not equal to this one.
  * `$exists` True if the field should exist, false otherwise.
  * `$type` One of: "null", "boolean", "number", "string", "array", or "object".
  * `$in` Matches if all the selectors in the array match.
  * `$and` Matches if all the selectors in the array match.
  * `$nin` The document field must not exist in the list provided.
  * `$all` Matches an array value if it contains all the elements of the argument array.
  * `$size` Special condition to match the length of an array field in a document.
  * `$or` Matches if any of the selectors in the array match. All selectors must use the same index.
  * `$nor` Matches if none of the selectors in the array match.
  * `$not` Matches if the given selector does not match.
  * `$mod` Matches documents where (field % Divisor == Remainder) is true, and only when the document field is an integer.
  * `$regex` A regular expression pattern to match against the document field.
  * `$elemMatch` Matches all documents that contain an array field with at least one element that matches all the specified query criteria.
* `fields` (Optional) Defines a list of fields that you want to receive. If omitted, you get the full documents.
* `sort` (Optional) Defines a list of fields defining how you want to sort. Note that sorted fields also have to be selected in the `selector`.
* `limit` (Optional) Maximum number of documents to return.
* `skip` (Optional) Number of docs to skip before returning.
* `use_index` (Optional) Set which index to use for the query. It can be "design-doc-name" or "['design-doc-name', 'name']".

If there's no index that matches your `selector`/`sort`, then this method will issue a warning:

{% highlight js %}
{
  "docs": [ /* ... */ ],
  "warning": "no matching index found, create an index to optimize query time"
}
{% endhighlight %}

The best index will be chosen automatically. If you want to see the query plan for your query, then turn on debugging:

{% highlight js %}
PouchDB.debug.enable('pouchdb:find');
{% endhighlight %}

See the [CouchDB `_find` documentation](http://docs.couchdb.org/en/2.0.0/api/database/find.html) for more details on
selectors and the Mango query language.

### More examples

Use `$eq` for "equals":

{% include code/start.html id="query_idx2" type="callback" %}
{% highlight js %}
db.find({
  selector: {name: {$eq: 'Mario'}}
}, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx2" type="async" %}
{% highlight js %}
try {
  var result = await db.find({
    selector: {name: {$eq: 'Mario'}}
  });
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx2" type="promise" %}
{% highlight js %}
db.find({
  selector: {name: {$eq: 'Mario'}}
}).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

This is equivalent to:

{% include code/start.html id="query_idx3" type="callback" %}
{% highlight js %}
db.find({
  selector: {name: 'Mario'}
}, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx3" type="async" %}
{% highlight js %}
try {
  var result = await db.find({
    selector: {name: 'Mario'}
  });
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx3" type="promise" %}
{% highlight js %}
db.find({
  selector: {name: 'Mario'}
}).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

You can also do selections on multiple fields. For instance, to
find all docs where `series` is `'Mario'` and `debut` is greater than `1990`:

{% include code/start.html id="query_idx4" type="callback" %}
{% highlight js %}
db.find({
  selector: {
    series: 'Mario',
    debut: { $gt: 1990 }
  }
}, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx4" type="async" %}
{% highlight js %}
try {
  var result = await db.find({
    selector: {
      series: 'Mario',
      debut: { $gt: 1990 }
    }
  });
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx4" type="promise" %}
{% highlight js %}
db.find({
  selector: {
    series: 'Mario',
    debut: { $gt: 1990 }
  }
}).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

This is equivalent to:

{% include code/start.html id="query_idx5" type="callback" %}
{% highlight js %}
db.find({
  selector: {
    $and: [
      { series: 'Mario' },
      { debut: { $gt: 1990 } }
    ]
  }
}, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx5" type="async" %}
{% highlight js %}
try {
  var result = await db.find({
    selector: {
      $and: [
        { series: 'Mario' },
        { debut: { $gt: 1990 } }
      ]
    }
  });
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx5" type="promise" %}
{% highlight js %}
db.find({
  selector: {
    $and: [
      { series: 'Mario' },
      { debut: { $gt: 1990 } }
    ]
  }
}).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

You can also sort the returned documents. For instance, to find all docs sorted by `debut` descending:

{% include code/start.html id="query_idx6" type="callback" %}
{% highlight js %}
db.find({
  selector: {
    debut: {'$gte': null}
  },
  sort: [{debut: 'desc'}]
}, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx6" type="async" %}
{% highlight js %}
try {
  var result = await db.find({
    selector: {
      debut: {'$gte': null}
    },
    sort: [{debut: 'desc'}]
  });
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="query_idx6" type="promise" %}
{% highlight js %}
db.find({
  selector: {
    debut: {'$gte': null}
  },
  sort: [{debut: 'desc'}]
}).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}
