MongoDB\Driver\Manager::executeQuery

Execute a database query

&reftitle.description; final public `MongoDB\Driver\Cursor` `MongoDB\Driver\Manager::executeQuery` `string` `namespace` `MongoDB\Driver\Query` `query` ``array``MongoDB\Driver\ReadPreference``null```options`&null;

Selects a server according to the `"readPreference"` option and executes the query on that server. By default, the read preference from the MongoDB Connection URI will be used.

&reftitle.parameters;
&mongodb.parameter.namespace; &mongodb.parameter.query;

`options`

- ## options

  Option | Type | Description
  &mongodb.option.readPreference; &mongodb.option.session;

&reftitle.returnvalues; &mongodb.returns.cursor;
&reftitle.errors;

&mongodb.throws.std;
- Throws `MongoDB\Driver\Exception\RuntimeException` on other errors (e.g. invalid query operators).

&reftitle.changelog;

&Version; | &Description;
PECL mongodb 1.4.0 | The third parameter is now an `options` array. For backwards compatibility, this paramater will still accept a `MongoDB\Driver\ReadPreference` object.

&reftitle.examples;

### `MongoDB\Driver\Manager::executeQuery` example

    <?php

    $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

    $bulk = new MongoDB\Driver\BulkWrite;
    $bulk->insert(['x' => 1]);
    $bulk->insert(['x' => 2]);
    $bulk->insert(['x' => 3]);
    $manager->executeBulkWrite('db.collection', $bulk);

    $filter = ['x' => ['$gt' => 1]];
    $options = [
        'projection' => ['_id' => 0],
        'sort' => ['x' => -1],
    ];

    $query = new MongoDB\Driver\Query($filter, $options);
    $cursor = $manager->executeQuery('db.collection', $query);

    foreach ($cursor as $document) {
        var_dump($document);
    }

    ?>

&example.outputs;

    object(stdClass)#6 (1) {
      ["x"]=>
      int(3)
    }
    object(stdClass)#7 (1) {
      ["x"]=>
      int(2)
    }

### Limiting execution time for a query

The `"maxTimeMS"` `MongoDB\Driver\Query` option may be used to limit the execution time of a query. Note that this time limit is enforced on the server side and does not take network latency into account. See Terminate Running Operations in the MongoDB manual for more information.

    <?php

    $manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');

    $filter = ['x' => ['$gt' => 1]];
    $options = [
        'maxTimeMS' => 1000,
    ];

    $query = new MongoDB\Driver\Query($filter, $options);
    $cursor = $manager->executeQuery('db.collection', $query);

    foreach ($cursor as $document) {
        var_dump($document);
    }

    ?>

If the query fails to complete after one second of execution time on the server, a `MongoDB\Driver\Exception\ExecutionTimeoutException` will be thrown.

&reftitle.seealso;

- `MongoDB\Driver\Cursor`
- `MongoDB\Driver\Query`
- `MongoDB\Driver\ReadPreference`
- `MongoDB\Driver\Server::executeQuery`