English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本章中,我们将学习如何从MongoDB集合中查询文档。
要查询MongoDB集合中的数据,您需要使用MongoDB的find()方法。
find()方法的基本语法如下-
>db.COLLECTION_NAME.find()
find() 方法将以非结构化方式显示所有文档。
假设我们已经创建了一个名为 mycol 的集合-
> use sampleDB switched to db sampleDB > db.createCollection("mycol") { "ok" : }} 1 } >
et utilisez la méthode insert() pour les insérer3un document, comme suit-
> db.mycol.insert([ { title : "Vue d'ensemble MongoDB", description : "MongoDB n'est pas une base de données SQL", by : "Tutoriel de base", url : "http://fr.oldtoolbag.com", tags : ["mongodb", "database", "NoSQL"], likes : 100 } { title : "Base de données NoSQL", description : "Les bases de données NoSQL n'ont pas de tables", by : "Tutoriel de base", url : "http://fr.oldtoolbag.com", tags : ["mongodb", "database", "NoSQL"], likes : 20, comments : [ { user : "user1", message : "Mon premier commentaire", dateCreated : new Date(2013,11,10,2,35, like : 0 } ] } ])
Les méthodes suivantes extraient tous les documents de la collection.-
> db.mycol.find(), { "_id" : ObjectId("5dd4e2cc0821d3b44607534c)), "title" : "Vue d'ensemble MongoDB", "description" : "MongoDB n'est pas une base de données SQL", "by" : "Tutoriel de base", "url" : "http://fr.oldtoolbag.com", "tags" : ["mongodb", "database", "NoSQL"], "likes" : 100 } { "_id" : ObjectId("5dd4e2cc0821d3b44607534d)), "title" : "Base de données NoSQL", "description" : "Les bases de données NoSQL n'ont pas de tables", "by" : "Tutoriel de base", "url" : "http://fr.oldtoolbag.com", "tags" : ["mongodb", "database", "NoSQL"], "likes" : 20, "comments" : [{ "user" : "user1", "message" : "Mon premier commentaire", "dateCreated" : ISODate("2013-12-09T21:05:00Z)), "like" : 0 }]} >
Pour afficher les résultats en formatage, vous pouvez utiliser la méthode pretty().
> db.COLLECTION_NAME.find().pretty(),
Les exemples suivants extraient tous les documents de la collection nommée mycol et les organisent dans un format facile à lire.
> db.mycol.find().pretty(), { "_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Aperçu", "description" : "MongoDB n'est pas une base de données SQL", "by" : "tutoriels de base", "url" : "http://fr.oldtoolbag.com", "tags" : [ "mongodb", "base de données", "NoSQL" ], "likes" : 100 } { "_id" : ObjectId("5dd4e2cc0821d3b44607534d)), "title" : "Base de données NoSQL", "description" : "Les bases de données NoSQL n'ont pas de tables" "by" : "tutoriels de base", "url" : "http://fr.oldtoolbag.com", "tags" : [ "mongodb", "base de données", "NoSQL" ], "likes" : 20, "comments" : [ { "user" : "user1", "message" : "Mon premier commentaire", "dateCreated" : ISODate("2013-12-09T21:05:00Z"), "like" : 0 } ] }
En plus de la méthode find(), il existe aussifindOne()La méthode ne retourne qu'un document.
>db.COLLECTIONNAME.findOne()
Les exemples suivants recherchent les documents dont le titre est MongoDB Overview.
> db.mycol.findOne({title: "MongoDB Overview"}) { "_id" : ObjectId("5dd6542170fb13eec3963bf0"), "title" : "MongoDB Aperçu", "description" : "MongoDB n'est pas une base de données SQL", "by" : "tutoriels de base", "url" : "http://fr.oldtoolbag.com", "tags" : [ "mongodb", "base de données", "NoSQL" ], "likes" : 100 }
Pour effectuer une recherche de documents en fonction de certaines conditions, vous pouvez utiliser les opérations suivantes.
Opération | Format | Exemple | Expression similaire dans un SGBDR |
---|---|---|---|
égal à | {<key>:<value>} | db.col.find({"by":"基础教程"}).pretty() | where by = '基础教程' |
inférieur à | {<key>:{$lt:<value>}} | db.col.find({"likes":{$lt:50}).pretty() | where likes < 50 |
au plus ou égal à | {<key>:{$lte:<value>}} | db.col.find({"likes":{$lte:50}).pretty() | where likes <= 50 |
supérieur à | {<key>:{$gt:<value>}} | db.col.find({"likes":{$gt:50}).pretty() | where likes > 50 |
au moins ou égal à | {<key>:{$gte:<value>}} | db.col.find({"likes":{$gte:50}).pretty() | where likes >= 50 |
different de | {<key>:{$ne:<value>}} | db.col.find({"likes":{$ne:50}).pretty() | where likes != 50 |
Les valeurs sont dans le tableau | {<key>:{$in:[<value1> <value2>,...<valueN>] | db.mycol.find({"name":{$in:["Raj", "Ram", "Raghu"]}}).pretty() | Où name correspond à l'un des valeurs :["Raj", "Ram", "Raghu"] |
La valeur n'est pas dans le tableau | {<clé>:{$nin:<valeur>}} | db.mycol.find({"name":{$nin:["Ramu", "Raghav"]}}).pretty() | La valeur de name n'est pas dans le tableau :["Ramu", "Raghav"] ou, ne existe pas du tout |
Pour rechercher des documents basés sur la condition "AND", il faut utiliser le mot-clé $and. Voici la syntaxe de base de AND-
>db.mycol.find({ $and: [ { <clé1>:<valeur1>}, { <clé2>:<valeur2>} ] )
Le prochain exemple montrera tous les tutoriaux écrits par "tutoriels de base" et avec le titre "MongoDB Aperçu".
> db.mycol.find({$and:[{"by":"tutoriels de base"},{"title": "MongoDB Aperçu"}]}).pretty() { "_id" : ObjectId("5dd4e2cc0821d3b44607534c"), "title" : "MongoDB Aperçu", "description" : "MongoDB n'est pas une base de données SQL", "by" : "tutoriels de base", "url" : "https://fr.oldtoolbag.com", "tags" : [ "mongodb", "base de données", "NoSQL" ], "likes" : 100 } >
Pour le exemple donné ci-dessus, la clause where équivalente sera' where by = 'tutoriels de base' AND title = 'MongoDB Aperçu' '. Vous pouvez transmettre un nombre quelconque de paires clé-valeur dans la clause find.
Pour rechercher des documents basés sur la condition "OR", il faut utiliser$orMots-clés. VoiciOUSyntaxe de base :
>db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
Le siguiente ejemplo mostrará todos los tutoriales escritos por "tutorials point" o con el título "MongoDB Aperçu".
>db.mycol.find({$or:[{"by":"tutorials point"},{"title": "MongoDB Aperçu"}]}).pretty() { "_id": ObjectId(7df78ad8902c), "title": "MongoDB Aperçu", "description": "MongoDB n'est pas une base de données SQL", "by": "base tutorial", "url": "http://fr.oldtoolbag.com", "tags": ["mongodb", "database", "NoSQL"], "likes": "100" } >
Le suivant exemple affichera les documents où likes est supérieur à}}10et pour lesquels le titre est "Présentation de MongoDB" ou "by" est "base tutorial", les documents. Équivalent à la clause WHERE SQL "where likes>10 ET (by = 'base tutorial' OU title = 'Présentation de MongoDB')
>db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"}, {"title": "Présentation MongoDB"}]).pretty() { "_id": ObjectId(7df78ad8902c), "title": "Présentation de MongoDB", "description": "MongoDB n'est pas une base de données SQL", "by": "base tutorial", "url": "http://fr.oldtoolbag.com", "tags": ["mongodb", "database", "NoSQL"], "likes": "100" } >
Pour effectuer une recherche de document avec des conditions NOR, il faut utiliser le mot-clé $nor. VoiciNORSyntaxe de base :
> db.COLLECTION_NAME.find( { $nor: [ {key1: value1}, {key2:value2} ] } )
hypothétiquement, nous sommes dans la collection empDetails a été inséré3un document, comme suit-
db.empDetails.insertMany( [ { First_Name: "Radhika", Last_Name: "Sharma", Age: "26", e_mail: "[email protected]", phone: "9000012345" } { First_Name: "Rachel", Last_Name: "Christopher", Age: "27", e_mail: "[email protected]", phone: "9000054321" } { First_Name: "Fathima", Last_Name: "Sheik", Age: "24", e_mail: "[email protected]", phone: "9000054321" } ] )
Le suivant exemple recherchera les documents dont le nom n'est pas "Radhika" et dont le nom n'est pas non plus "Christopher"
> db.empDetails.find( { $nor:[ 40 {"First_Name": "Radhika"}, {"Last_Name": "Christopher"} ] } ).pretty() { "_id" : ObjectId("5dd631f270fb13eec3963bef"), "First_Name" : "Fathima", "Last_Name" : "Sheik", "Age" : "24", "e_mail" : "[email protected]", "phone" : "9000054321" }
Pour effectuer une recherche de document avec une condition NOT, vous devez utiliser la clé $not, voiciNOTSyntaxe de base :
> db.COLLECTION_NAME.find( { $NOT: [ {key1: value1}, {key2:value2} ] } ).pretty()
L'exemple suivant recherchera les documents d'âge inférieur ou égal à25ans" de documents
> db.empDetails.find( { "Age": { $not: { $gt: "25} } ) { "_id" : ObjectId("5dd6636870fb13eec3963bf7") "First_Name" : "Fathima", "Last_Name" : "Sheik", "Age" : "24", "e_mail" : "[email protected]", "phone" : "9000054321" }