---
name: "Mango::Cursor::Query"
section: "3pm"
platform: "linux"
package: "libmango-perl"
version: "1.30-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Mango::Cursor::Query"
---

# Mango::Cursor::Query(3pm)

MongoDB query cursor

## NAME

Mango::Cursor::Query - MongoDB query cursor

## SYNOPSIS

```
  use Mango::Cursor::Query;
  my $cursor = Mango::Cursor::Query->new(collection => $collection);
  my $docs   = $cursor->all;
```

## DESCRIPTION

Mango::Cursor::Query is a container for MongoDB query cursors used by Mango::Collection.

## ATTRIBUTES

Mango::Cursor::Query inherits all attributes from Mango::Cursor and implements the following new ones.

### await\_data

```
  my $await = $cursor->await_data;
  $cursor   = $cursor->await_data(1);
```

Await data.

### comment

```
  my $comment = $cursor->comment;
  $cursor     = $cursor->comment('Fun query!');
```

A comment to identify query.

### fields

```
  my $fields = $cursor->fields;
  $cursor    = $cursor->fields({foo => 1});
```

Select fields from documents.

### hint

```
  my $hint = $cursor->hint;
  $cursor  = $cursor->hint({foo => 1});
```

Force a specific index to be used.

### max\_scan

```
  my $max = $cursor->max_scan;
  $cursor = $cursor->max_scan(500);
```

Limit the number of documents to scan.

### max\_time\_ms

```
  my $max = $cursor->max_time_ms;
  $cursor = $cursor->max_time_ms(500);
```

Timeout for query in milliseconds.

### query

```
  my $query = $cursor->query;
  $cursor   = $cursor->query({foo => 'bar'});
```

Original query.

### read\_preference

```
  my $pref = $cursor->read_preference;
  $cursor  = $cursor->read_preference({mode => 'SECONDARY'});
```

Read preference.

### skip

```
  my $skip = $cursor->skip;
  $cursor  = $cursor->skip(5);
```

Number of documents to skip, defaults to `0`.

### snapshot

```
  my $snapshot = $cursor->snapshot;
  $cursor      = $cursor->snapshot(1);
```

Use snapshot mode.

### sort

```
  my $sort = $cursor->sort;
  $cursor  = $cursor->sort({foo => 1});
  $cursor  = $cursor->sort(bson_doc(foo => 1, bar => -1));
```

Sort documents, the order of keys matters.

### tailable

```
  my $tailable = $cursor->tailable;
  $cursor      = $cursor->tailable(1);
```

Tailable cursor.

## METHODS

Mango::Cursor::Query inherits all methods from Mango::Cursor and implements the following new ones.

### build\_query

```
  my $query = $cursor->build_query;
  my $query = $cursor->build_query($explain);
```

Generate final query with cursor attributes.

### clone

```
  my $clone = $cursor->clone;
```

Clone cursor.

### count

```
  my $count = $cursor->count;
```

Count number of documents this cursor can return. You can also append a callback to perform operation non-blocking.

```
  $cursor->count(sub {
    my ($cursor, $err, $count) = @_;
    ...
  });
  Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
```

### distinct

```
  my $values = $cursor->distinct('foo');
```

Get all distinct values for key. You can also append a callback to perform operation non-blocking.

```
  $cursor->distinct(foo => sub {
    my ($cursor, $err, $values) = @_;
    ...
  });
  Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
```

### explain

```
  my $doc = $cursor->explain;
```

Provide information on the query plan. You can also append a callback to perform operation non-blocking.

```
  $cursor->explain(sub {
    my ($cursor, $err, $doc) = @_;
    ...
  });
  Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
```

## SEE ALSO

Mango, Mojolicious::Guides, \<http://mojolicio.us\>.
