MongoDB Find : retrouver des documents dans des collections

Les commandes MongoDB Find et Find One permettent de localiser des documents correspondant aux paramètres de recherche. Ces commandes s’utilisent aussi avec Python ou Node.js.

MongoDB Find : c’est quoi et à quoi ça sert ?

Si MongoDB vous est familier, vous savez déjà que le système de gestion de bases de données fonctionne un peu différemment des bases de données relationnelles classiques, comme par exemple MySQL. Certes, MongoDB permet aussi de créer des bases de données. Cependant, ces données sont stockées dans des documents, et non des tables, qui sont à leur tour regroupés en collections. Dans une telle configuration, comment rechercher et afficher les données correspondantes ? Pour cela, il existe deux commandes MongoDB : Find et Find One. Elles créent un curseur vers des documents qui correspondent aux critères de recherche définis.

Syntaxe de la commande Find

Pour comprendre comment fonctionne la commande Find, il faut commencer par jeter un coup d’œil à sa syntaxe de base :

db.collection.find
(
<query>,</query>
<projection></projection>
)

Find inclut également deux autres paramètres notés entre crochets. <query> est un paramètre de filtrage qui permet de spécifier la recherche, tandis que le deuxième paramètre facultatif <projection> détermine les éléments à afficher pour chaque document correspondant.

Exemple de commande Find

Imaginons par exemple que vous souhaitiez effectuer une recherche dans une liste de clients en France à l’aide de la commande Find de MongoDB. Cette liste se trouve dans la base de données « clients ». Pour afficher la liste de tous les documents, utilisez la commande Find sans spécifier de paramètre <projection> ni <query>. Voici à quoi ressemble le code :

>use clients
switched to db clients
>db.liste_france.find();
>

Le résultat est la liste complète des clients français, avec toutes les informations enregistrées. Les documents sont toujours précédés de leur identifiant unique _id, qui permet au système d’identifier chaque document avec précision.

Exemple de commande Find avec paramètres

S’il peut en effet être utile de lister tous les documents à l’aide de la commande Find, cela devient beaucoup plus intéressant si vous souhaitez filtrer uniquement des documents spécifiques. C’est ce à quoi servent les paramètres mentionnés plus haut. Imaginons que les informations suivantes soient enregistrées pour chaque client et qu’elles puissent être affichées sur demande :

"_id": ObjectID,
"name": "Martin"
"adress": "152 rue des Pyrénées"
"city": "Paris"

Si votre base de données contient plusieurs centaines de clients de différentes villes et que vous ne souhaitez filtrer par exemple que ceux vivant à Paris, voici comment faire :

Db.liste_france.find({"city": "Paris"})

Le système filtre maintenant toutes les entrées de la collection « liste_france » et n’affiche que les résultats dont la ville est Paris.

Exemple de commande Find-One

À côté de l’option générale Find, qui permet d’afficher tous ou partie des documents, le système propose aussi la fonction supplémentaire MongoDB Find One. Cette méthode affiche exactement un document correspondant aux critères de recherche. C’est le premier document de la liste qui est sélectionné. Si aucun document ne correspond aux critères de recherche, le résultat est « null » est affiché. La syntaxe de Find One ressemble à celle de Find :

db.collection.findOne
(
<query>,</query>
<projection></projection>
)

Dans ce cas aussi, <query> définit les critères de recherche, et <projection> (facultatif) indique les champs des résultats à afficher. En reprenant notre exemple ci-dessus avec la commande Find One, voici comment l’utiliser :

>use clients
switched to db clients
>db.liste_france.findOne();
>

Dans ce cas, la sortie sera le premier document de votre liste de clients France.

Commande MongoDB Find avec Node.js et Python

Il est aussi possible d’utiliser MongoDB avec Node.js ou Python. Dans ce cas, la syntaxe de la commande Find est un peu différente, tout en conservant les mêmes fonctionnalités de base.

Commande Find One avec Python

L’une des distributions MongoDB les plus populaires sous Python est PyMongo. Si c’est celle que vous utilisez, la commande Find One aura la syntaxe suivante :

import pymongo
myclient = pymongo.MongoClient ("mongodb://localhost:24137/")
mydb = myclient ["clients"]
mycol = mydb ["liste_france"]
x = myco.find_one()
print ( x )

Commande Find-One avec Node.js

L’environnement d’exécution JavaScript Node.js peut aussi être utilisé dans MongoDB. Si vous souhaitez y exécuter la commande Find One, voici à quoi ressemble le code :

var MongoClient = require ('mongodb').MongoClient;
var url = "mongodb://localhost:24137/";
MongoClient.connect (url, function (err, db) {
if (err) throw err;
var dbo = db.db ("mydb");
dbo.collection ("liste_france").findOne ( {}, function (err, result) {
if (err) throw err;
console-log (result.name);
db.close();
} );
} );
Conseil

Vous cherchez à trier vos documents dans MongoDB pour plus de lisibilité ? Alors gagnez du temps avec la commande MongoDB Sort !