{% 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.

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