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

search for in the

MongoCollection::findOne> <MongoCollection::ensureIndex
[edit] Last updated: Fri, 25 May 2012

view this page in

MongoCollection::find

(PECL mongo >=0.9.0)

MongoCollection::findInterroge une collection, et retourne comme jeu de résultats un objet MongoCursor

Description

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

Liste de paramètres

query

Le champ dans lequel la recherche va s'effectuer. Le langage de requête Mongo est assez extensible. Le driver PHP passera dans la plupart des cas la requête au serveur, aussi, la lecture de la documentation coeur de MongoDB sur la fonctionnalité » find pourrait être une bonne idée.

Avertissement

Assurez-vous que pour tous les opérateurs spéciaux de la requête (commençant par $) vous utilisez des guillemets doubles, et ainsi, PHP ne tentera pas de remplacer "$exists" avec la valeur de la variable $exists.

fields

Les champs qui devront être retournés dans le résultat. Le tableau est au format array('fieldname' => true, 'fieldname2' => true). Le champ _id sera, quant à lui, toujours retourné.

Valeurs de retour

Retourne un curseur pour les résultats de recherche.

Exemples

Exemple #1 Exemple avec MongoCollection::find()

Cet exemple montre comment rechercher un intervalle.

<?php

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

// recherche les documents dont l'identifiant est entre 5 < x < 20
$rangeQuery = array('x' => array( '$gt' => 5'$lt' => 20 ));

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

?>

L'exemple ci-dessus va afficher :

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

Voyez MongoCursor pour plus d'informations sur le fonctionnement des curseurs.

Exemple #2 Exemple pour MongoCollection::find() en utilisant $where

Cet exemple montre comment chercher dans une collection en utilisant du code javascript pour réduire les résultats retournés.

<?php

$m 
= new Mongo();
$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);
}

?>

L'exemple ci-dessus va afficher :

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

Exemple #3 Exemple pour MongoCollection::find() utilisant $in

Cet exemple montre comment chercher dans une collection en utilisant l'opérateur $in.

<?php

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

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

?>

L'exemple ci-dessus va afficher :

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

Exemple #4 Récupération des résultats sous la forme d'un tableau

Cet exemple retourne un objet MongoCursor. Lors des débuts, il peut être plus confortable d'utiliser un tableau. Pour transformer un curseur en un tableau, utilisez la fonction iterator_to_array().

<?php

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

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

?>

L'exemple ci-dessus va afficher :

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

L'utilisation de la fonction iterator_to_array() force le driver à charger tous les résultats en mémoire, aussi, évitez d'utiliser cette fonction sur des jeux de résultats qui peuvent être plus grands que la mémoire disponible!

Aussi, certaines collections n'ont pas de champ _id. Si vous manipulez des collections ne possédans pas de champ _id, passez FALSE au second paramètre de iterator_to_array() (il n'essayera pas d'utiliser les valeurs innexistantes de _id comme clés).

Voir aussi



add a note add a note User Contributed Notes MongoCollection::find
Andrew Rose (blog.andrewrose.co.uk) 20-Sep-2011 04:48
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;
?>
nospam at alexyves dot fr 09-Dec-2010 03:28
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

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