MongoCollection::find

Queries this collection, returning a `MongoCursor` for the result set

&reftitle.description; public `MongoCursor` `MongoCollection::find` `array` `query` array() `array` `fields` array()
&reftitle.parameters;

`query`

- The fields for which to search. MongoDB's query language is quite extensive. The PHP driver will in almost all cases pass the query straight through to the server, so reading the MongoDB core docs on find is a good idea.

  Please make sure that for all special query operators (starting with `$`) you use single quotes so that PHP doesn't try to replace `"$exists"` with the value of the variable `$exists`.

`fields`

- Fields of the results to return. The array is in the format `array('fieldname' => true, 'fieldname2' => true)`. The `_id` field is always returned.

&reftitle.returnvalues;

Returns a cursor for the search results.

&reftitle.examples;

### `MongoCollection::find` example

This example demonstrates basic search options.

    <?php

    $m = new MongoClient();
    $db = $m->selectDB('test');
    $collection = new MongoCollection($db, 'produce');

    // search for fruits
    $fruitQuery = array('Type' => 'Fruit');

    $cursor = $collection->find($fruitQuery);
    foreach ($cursor as $doc) {
        var_dump($doc);
    }

    // search for produce that is sweet. Taste is a child of Details.
    $sweetQuery = array('Details.Taste' => 'Sweet');
    echo "Sweet\n";
    $cursor = $collection->find($sweetQuery);
    foreach ($cursor as $doc) {
        var_dump($doc);
    }

    ?>

&example.outputs;

    array(4) {
      ["_id"]=>
      object(MongoId)#7 (1) {
        ["$id"]=>
        string(24) "50a87dd084f045a19b220dd6"
      }
      ["Name"]=>
      string(5) "Apple"
      ["Type"]=>
      string(5) "Fruit"
      ["Details"]=>
      array(2) {
        ["Taste"]=>
        string(5) "Sweet"
        ["Colour"]=>
        string(3) "Red"
      }
    }
    array(4) {
      ["_id"]=>
      object(MongoId)#8 (1) {
        ["$id"]=>
        string(24) "50a87de084f045a19b220dd7"
      }
      ["Name"]=>
      string(5) "Lemon"
      ["Type"]=>
      string(5) "Fruit"
      ["Details"]=>
      array(2) {
        ["Taste"]=>
        string(4) "Sour"
        ["Colour"]=>
        string(5) "Green"
      }
    }

    Sweet:
    array(4) {
      ["_id"]=>
      object(MongoId)#7 (1) {
        ["$id"]=>
        string(24) "50a87dd084f045a19b220dd6"
      }
      ["Name"]=>
      string(5) "Apple"
      ["Type"]=>
      string(5) "Fruit"
      ["Details"]=>
      array(2) {
        ["Taste"]=>
        string(5) "Sweet"
        ["Colour"]=>
        string(3) "Red"
      }
    }

See `MongoCursor` for more information how to work with cursors.

### `MongoCollection::find` example

This example demonstrates how to search for a range.

    <?php

    $m = new MongoClient();
    $db = $m->selectDB('test');
    $collection = new MongoCollection($db, 'phpmanual');

    // search for documents where 5 < x < 20
    $rangeQuery = array('x' => array( '$gt' => 5, '$lt' => 20 ));

    $cursor = $collection->find($rangeQuery);
    foreach ($cursor as $doc) {
        var_dump($doc);
    }

    ?>

&example.outputs;

    array(2) {
      ["_id"]=>
      object(MongoId)#10 (1) {
        ["$id"]=>
        string(24) "4ebc3e3710b89f2349000000"
      }
      ["x"]=>
      int(12)
    }
    array(2) {
      ["_id"]=>
      object(MongoId)#11 (1) {
        ["$id"]=>
        string(24) "4ebc3e3710b89f2349000001"
      }
      ["x"]=>
      int(12)
    }

See `MongoCursor` for more information how to work with cursors.

### `MongoCollection::find` example using $where

This example demonstrates how to search a collection using javascript code to reduce the resultset.

    <?php

    $m = new MongoClient();
    $db = $m->selectDB('test');
    $collection = new MongoCollection($db, 'phpmanual');

    $js = "function() {
        return this.name == 'Joe' || this.age == 50;
    }";
    $cursor = $collection->find(array('$where' => $js));
    foreach ($cursor as $doc) {
        var_dump($doc);
    }

    ?>

&example.outputs;

    array(3) {
      ["_id"]=>
      object(MongoId)#7 (1) {
        ["$id"]=>
        string(24) "4ebc3e3710b89f2349000002"
      }
      ["name"]=>
      string(3) "Joe"
      ["age"]=>
      int(20)
    }

### `MongoCollection::find` example using $in

This example demonstrates how to search a collection using the $in operator.

    <?php

    $m = new MongoClient();
    $db = $m->selectDB('test');
    $collection = new MongoCollection($db, 'phpmanual');

    $cursor = $collection->find(array(
        'name' => array('$in' => array('Joe', 'Wendy'))
    ));

    ?>

&example.outputs;

    array(3) {
      ["_id"]=>
      object(MongoId)#7 (1) {
        ["$id"]=>
        string(24) "4ebc3e3710b89f2349000002"
      }
      ["name"]=>
      string(3) "Joe"
      ["age"]=>
      int(20)
    }

### Getting results as an array

This returns a `MongoCursor`. Often, when people are starting out, they are more comfortable using an array. To turn a cursor into an array, use the `iterator_to_array` function.

    <?php

    $m = new MongoClient();
    $db = $m->selectDB('test');
    $collection = new MongoCollection($db, 'phpmanual');

    $cursor = $collection->find();
    $array = iterator_to_array($cursor);

    ?>

&example.outputs;

    array(3) {
      ["4ebc40af10b89f5149000000"]=>
      array(2) {
        ["_id"]=>
        object(MongoId)#6 (1) {
          ["$id"]=>
          string(24) "4ebc40af10b89f5149000000"
        }
        ["x"]=>
        int(12)
      }
      ["4ebc40af10b89f5149000001"]=>
      array(2) {
        ["_id"]=>
        object(MongoId)#11 (1) {
          ["$id"]=>
          string(24) "4ebc40af10b89f5149000001"
        }
        ["x"]=>
        int(12)
      }
      ["4ebc40af10b89f5149000002"]=>
      array(3) {
        ["_id"]=>
        object(MongoId)#12 (1) {
          ["$id"]=>
          string(24) "4ebc40af10b89f5149000002"
        }
        ["name"]=>
        string(3) "Joe"
        ["age"]=>
        int(20)
      }
    }

Using `iterator_to_array` forces the driver to load all of the results into memory, so do not do this for result sets that are larger than memory!

Also, certain system collections do not have an `_id` field. If you are dealing with a collection that might have documents without `_id`s, pass &false; as the second argument to `iterator_to_array` (so that it will not try to use the non-existent `_id` values as keys).

&reftitle.seealso;

- `MongoCollection::findOne`
- `MongoCollection::insert`
- MongoDB core docs on find.