downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

MongoCollection::findOne> <MongoCollection::ensureIndex
[edit] Last updated: Fri, 24 Jun 2011

view this page in

MongoCollection::find

(PECL mongo >=0.9.0)

MongoCollection::findQuerys this collection

Description

public MongoCursor MongoCollection::find ([ array $query = array() [, array $fields = array() ]] )

Parameters

query

The fields for which to search.

fields

Fields of the results to return.

Return Values

Returns a cursor for the search results.

Examples

Example #1 MongoCollection::find() example

This example demonstrates how to search for a range.

<?php

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

$cursor $collection->find($rangeQuery);

?>

See MongoCursor for more information how to work with cursors.

Example #2 MongoCollection::find() example using $where

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

<?php

$collection 
$db->my_db->articles;

$js "function() {
  return this.type == 'homepage' || this.featured == true;
}"
;
$articles $collection->find(array('$where' => $js));

?>

Example #3 MongoCollection::find() example using $in

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

<?php

$collection 
$db->my_db->articles;
$articles $collection->find(array(
  
'type' => array('$in' => array('homepage''editorial'))
));

?>

Example #4 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

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

?>

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 _ids, 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).

See Also

MongoDB core docs on » find.



add a note add a note User Contributed Notes MongoCollection::find - [2 notes]
up
1
nospam at alexyves dot fr
2 years ago
This will work with versions >=1.5.3, please note that this is just a example of the way to use the or statement.

<?php
  $connection
= new Mongo();

 
$db = $connection->test;
 
$collection = $db->test;
 
// Clean the DB before the test.
 
$collection->drop();
 
$collection = $db->test;

 
$apple = array(
   
'fruit' => 'Apple',
   
'type' => 'Juice',
  );

 
$orange = array(
   
'fruit' => 'Orange',
   
'type' => 'Marmalade',
  );

 
$collection->insert($apple);
 
$collection->insert($orange);

 
// Basic find
 
$results = $collection->find(array('fruit' => 'Apple'));

  foreach(
$results as $result)
  {
    echo
sprintf("Fruit: %s, Type: %s%s", $result['fruit'], $result['type'], PHP_EOL);
  }
?>

Output:

Fruit: Apple, Type: Juice

Now an advanced search with "or" statement.

<?php
 
// Advanced find with "OR" note the double array.
  // if you use double quotes escape the or "\$or"
 
$results = $collection->find( array( '$or' => array( array('fruit' => 'Apple'), array('fruit' => 'Orange') ) ) );

  foreach(
$results as $result)
  {
    echo
sprintf("Fruit: %s, Type: %s%s", $result['fruit'], $result['type'], PHP_EOL);
  }
?>

Output:

Fruit: Apple, Type: Juice
Fruit: Orange, Type: Marmalade
up
-1
Andrew Rose (blog.andrewrose.co.uk)
1 year ago
An undocumented feature is that you can pass a stdClass instead of an array to $fields which will allow you to get around the issue of PHP casting string values to integers which mongo doesn't like.  i.e.

array('123' => 0, '321' => 0);

becomes:

array(213 => 0, 312 => 0);

which will trip up with the error:

PHP Fatal error:  Uncaught exception 'MongoException' with message 'field names must be strings'

The fix is as simple as:

<?php
$fields
= new stdClass;
$fields->{123} = 0;
$fields->{321} = 0;
?>

 
show source | credits | sitemap | contact | advertising | mirror sites