MongoCollection::find
(PECL mongo >=0.9.0)
MongoCollection::find — Interroge une collection, et retourne comme jeu de résultats un objet MongoCursor
Description
$query
= array()
[, array $fields
= array()
]] ) : MongoCursorListe 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.
AvertissementAssurez-vous que pour tous les opérateurs spéciaux de la requête (commençant par $) vous utilisez des guillemets simples, 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é.
Exemples
Exemple #1 Exemple avec MongoCollection::find()
Cet exemple montre l'utilisation des options de recherche via un exemple simple.
<?php
$m = new MongoClient();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'produce');
// recherche des fruits
$fruitQuery = array('Type' => 'Fruit');
$cursor = $collection->find($fruitQuery);
foreach ($cursor as $doc) {
var_dump($doc);
}
// recherche des produits sucrés. Le goût est un enfant de "Details"
$sweetQuery = array('Details.Taste' => 'Sweet');
echo "Sucré \n";
$cursor = $collection->find($sweetQuery);
foreach ($cursor as $doc) {
var_dump($doc);
}
?>
L'exemple ci-dessus va afficher :
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" } } Sucré : 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" } }
Voir la classe MongoCursor pour plus d'informations sur le fonctionnement des curseurs.
Exemple #2 Exemple avec MongoCollection::find()
Cet exemple montre comment rechercher un intervalle.
<?php
$m = new MongoClient();
$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 #3 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 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);
}
?>
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 Exemple pour MongoCollection::find() utilisant $in
Cet exemple montre comment chercher dans une collection en utilisant l'opérateur $in.
<?php
$m = new MongoClient();
$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 #5 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 MongoClient();
$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
- MongoCollection::findOne() - Interroge cette collection, retourne un seul élément
- MongoCollection::insert() - Insère un document dans la collection
- Documentation de MongoDB sur » find
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mongocollection.find.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.