MongoDB findOne : fonctionnalités et exemples

La méthode MongoDB findOne est très efficace pour la recherche au sein d’une collection. Cependant, elle ne renvoie qu’un seul résultat à la fois : elle ne convient donc pas à tous les besoins.

Qu’est-ce que MongoDB findOne ?

MongoDB est un système de gestion de base de données qui, grâce à son approche NoSQLet à sa grande évolutivité, peut facilement stocker et gérer de grandes quantités de données. C’est certes un grand avantage, mais cela nécessite des méthodes solides pour que les utilisateurs gardent une vue d’ensemble lors du travail avec la base de données.

Le système enregistre les données de tous types sous la forme d’un document BSON (Binary JSON) et regroupe ces documents en collections. Si vous souhaitez rechercher et éditer l’un de ces documents, vous avez plusieurs possibilités. Outre la méthode plus générale MongoDB find, MongoDB findOne est une méthode très efficace pour filtrer de manière ciblée même les bases de données volumineuses.

MongoDB findOne recherche tous les documents et collections pris en compte selon certains critères qui peuvent être spécifiés par l’utilisateur. La particularité de cette méthode est qu’elle ne renvoie qu’un seul document correspondant aux paramètres définis. S’il n’y a qu’un seul document qui apparaît dans la demande de recherche, celui-ci est pris en compte. Si plusieurs documents entrent en ligne de compte, MongoDB findOne affiche le document qui apparaît en premier dans l’ordre naturel de la base de données. Si aucun document ne peut être trouvé lors de la recherche, le résultat est « zéro ».

Syntaxe et particularités de MongoDB findOne

La syntaxe de base de MongoDB findOne est très claire. La méthode est toujours appliquée de la manière suivante :

db.collection.findOne ( <query>, <projection>, <options> )
shell

Sous <query>, on indique les paramètres de recherche selon lesquels la méthode doit filtrer les documents. Cette entrée est facultative. Les entrées sous <projection> déterminent quels champs sont pris en compte pour le document affiché. Les valeurs autorisées pour la sortie sont les valeurs booléennes 1 (respectivement vrai) et 0 (respectivement faux). Si cette indication reste vide, tous les champs sont toujours affichés. Elle est donc également facultative. <options> permet de modifier la recherche et de changer l’affichage.

Note

Pour effectuer des recherches efficaces dans les collections avec plusieurs paramètres de recherche, il existe MongoDB Queries, que nous expliquerons plus en détail dans un autre article. Les requêtes sont basées sur la commande MongoDB find.

Créer une collection à des fins de test

Si vous avez installé MongoDB sous Linux, Windows ou Mac et que vous souhaitez utiliser MongoDB findOne pour vous-même, il vaut la peine de créer d’abord un environnement de test pour la première utilisation de la méthode. Nous vous montrons les premiers pas avec la base de données dans notre tutoriel MongoDB très complet. Pour notre exemple, nous nous imaginons une base de données d’employés qui contient cinq entrées et des informations sur le nom, le sexe et l’âge de l’employé. Il y a également une information sur la date d’entrée de la personne dans l’entreprise. Cette collection se présente par exemple comme suit :

db.collaborateurs.insertMany ( [
    {
    name : "Martin",
    gender : "Female",
    age : 56,
    year : 2002
    },
    {
    name : "Lejeune",
    gender : "Female",
    age : 40,
    year : 2017,
    },
    {
    name : "Foucault",
    gender : "Male",
    age : 40,
    year : 2019
    },
    {
    name : "Arslan",
    gender : "Female",
    age : 44,
    year : 2015
    },
    name : "Jacob",
    gender : "Male",
    age : 22,
    year : 2022
    }
]
)
shell

MongoDB findOne : recherche sans paramètres

Si vous appliquez dans cet exemple la méthode MongoDB findOne sans aucun paramètre, le système va rechercher dans votre base de données et trouver cinq entrées qu’il doit prendre en compte. Comme aucun document n’est exclu, les cinq collaborateurs et collaboratrices entrent en ligne de compte. En conséquence, MongoDB findOne sélectionnerait la première personne qui a été saisie dans la base de données, car la méthode ne joue qu’un seul résultat à la fois. Voici le résultat pour notre exemple :

db.collaborateurs.findOne ( )
shell

Voici la sortie correspondante :

db.collaborateurs.findOne ( )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Martin",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

Rechercher des entrées par ID

MongoDB findOne propose les outils adéquats pour effectuer une recherche spécifique afin de trouver exactement le document dont vous avez besoin. Une méthode très sûre est la recherche par ID. Le champ _id est unique dans chaque document et peut donc toujours être attribué exactement à un collaborateur, dans le cas de notre exemple. Si vous exécutez MongoDB findOne via l’ID de l’objet, vous obtiendrez le résultat exact. Voici une mise en situation avec notre exemple précédent :

db.collaborateurs.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
shell

La sortie devrait alors être la suivante :

db.collaborateurs.findOne ( { _id : ObjectID ( "582pfh773813tw982qj411l0" ) } )
{
    _id : ObjectID ( "582pfh773813tw982qj411l0"
    name : "Jacob",
    gender : "Male",
    age : 22,
    year : 2022
}
shell

Rechercher des champs spécifiques avec MongoDB findOne

Si vous ne connaissez pas l’ID ou si vous souhaitez rechercher d’autres paramètres dans votre collection, vous pouvez également rechercher des champs spéciaux avec MongoDB findOne. Ici aussi, s’il n’y a qu’un seul document correspondant au paramètre, c’est lui qui sera affiché. Toutefois, si plusieurs documents correspondent à vos critères de recherche, le système n’affichera que la première entrée. Dans notre exemple, nous recherchons donc toutes les entrées dont le sexe est « Male » (homme). En théorie, la sortie serait composée de deux résultats. Mais seul le premier sera affiché. Voici comment fonctionne la commande correspondante :

db.collaborateurs.findOne ( { gender : "Male" } )
shell

La sortie montre alors l’employé M. Foucault :

db.collaborateurs.findOne ( { gender : "Male" } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Foucault",
    gender : "Male",
    age : 40,
    year : 2019
}
shell

MongoDB findOne : spécifier la recherche

Bien sûr, vous avez aussi la possibilité de limiter votre recherche pour éviter tout chevauchement. Dans notre petite collection d’exemples, ce n’est pas forcément nécessaire, mais si vous travaillez avec plusieurs centaines ou milliers d’entrées, vous apprécierez cette option. MongoDB findOne vous permet d’utiliser plusieurs champs pour la recherche. Voici à quoi cela ressemble si vous souhaitez identifier un employé en fonction de son sexe (homme) et de son âge :

db.collaborateurs.findOne ( { gender : "Male", age: 40 } )
shell

La sortie montre alors à nouveau M. Foucault, qui est la seule personne de la collection à être un homme et à avoir 40 ans. L’employée Mme Lejeune aurait certes eu le même âge, mais elle est de sexe féminin.

db.collaborateurs.findOne ( { gender : "Male", age: 40 } )
{
    _id : ObjectID ( "498p0t173mv489fh63th00kh"
    name : "Foucault",
    gender : "Male",
    age : 40
    year : 2019
}
shell

Définir des conditions pour un champ

Il est également possible de définir des conditions pour un champ spécifique et de les appliquer comme critère de recherche. Dans l’exemple suivant, nous ne prenons en compte que les personnes âgées de plus de 30 ans.

Voici la saisie :

db.collaborateurs.findOne ( { age : { $gt : 30 } } )
shell

Ainsi, le collaborateur M. Jacob est exclu. Comme Mme Martin correspond au critère et qu’elle est la première personne de la liste, elle est à nouveau affichée :

db.collaborateurs.findOne ( { age : { $gt : 30 } } )
{
    _id : ObjectID ( "529ete7300of4002bme148om" ),
    name : "Foucault",
    gender : "Female",
    age : 56,
    year : 2002
}
shell

Exclure des champs avec MongoDB findOne

C’est surtout dans le cas de collections étendues, qui contiennent en plus beaucoup d’informations, que la sortie peut devenir confuse. C’est pourquoi MongoDB findOne offre la possibilité d’exclure des champs individuels pour la sortie. Dans l’exemple suivant, nous souhaitons que l’ID, le sexe et l’âge ne soient pas affichés.

db.collaborateurs.findOne ( { name : "Martin" }, { _id : 0, gender : 0, age : 0 } )
shell

Comme toutes les autres données sont affichées, vous obtenez la sortie suivante :

db.collaborateurs.findOne ( {name : "Martin" }, { _id : 0, gender : 0, age : 0 } )
{
    name : "Martin",
    year : 2002
}
shell

Exemple de recherche infructueuse

S’il n’y a pas de résultats pour votre recherche avec MongoDB findOne, cela vous sera indiqué. Nous recherchons donc la collaboratrice Ferrier qui n’est pas mentionnée dans la collection.

db.collaborateurs.findOne ( { name : "Ferrier" } )
shell

La sortie est alors la suivante :

db.collaborateurs.findOne ( { name : "Ferrier" } )
null
shell
Conseil

Pour gérer plus facilement votre base de données, il existe une interface graphique gratuite MongoDB Compass, que nous présenterons dans un autre article.

Cet article vous a-t-il été utile ?
Page top