Python Mongodb Interroger des documents

Python Mongodb Python MongoDB

Dans MongoDB, les méthodes find et find_one sont utilisées pour interroger des données dans des collections, de manière similaire à l'instruction SELECT en SQL.

Les données de test utilisées dans cet article sont les suivantes :

Interroger un document

Nous pouvons utiliserfind_one()comme méthode pour interroger un document dans une collection.

Rechercher danssitesle premier document de la collection :

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] x = mycol.find_one() print(x)

Le résultat de sortie est:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}

Interroger tous les documents d'une collection

find()peut interroger toutes les données d'une collection, similaire à l'opérationSELECT *en SQL.

L'exemple suivant trouvesitestous les documents dans la collection :

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find(): print(x)

Le résultat de sortie est:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}

Interroger des champs spécifiques

Nous pouvons utiliser la méthode find() pour interroger des champs spécifiques, en définissant la valeur correspondante du champ à renvoyer à 1.

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }): print(x)

Le résultat de sortie est:

{'name': 'EXAMPLE', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}

À l'exception de _id, vous ne pouvez pas spécifier à la fois 0 et 1 dans un même objet. Si vous définissez un champ sur 0, tous les autres sont à 1, et inversement.

L'exemple suivant renvoie tous les champs sauf le champ alexa :

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find({},{ "alexa": 0 }): print(x)

Le résultat de sortie est:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'url': 'https://www.github.com'}

Le code suivant signalera une erreur si 0 et 1 sont tous deux spécifiés:

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] for x in mycol.find({},{ "name": 1, "alexa": 0 }): print(x)

Le contenu de l'erreur est à peu près le suivant :

...
pymongo.errors.OperationFailure: Projection cannot have a mix of inclusion and exclusion.
...

Requête avec des conditions spécifiées

Nous pouvons définir des paramètres dansfind()pour filtrer les données.

L'exemple suivant recherche les données où le champ name est "EXAMPLE":

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myquery = { "name": "EXAMPLE" } mydoc = mycol.find(myquery) for x in mydoc: print(x)

Le résultat de sortie est:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}

Requête avancée

Dans les instructions de condition de requête, nous pouvons également utiliser des modificateurs.

L'exemple suivant lit les données où la première lettre du champ name a une valeur ASCII supérieure à "H". La condition du modificateur supérieur à est{"$gt": "H"} :

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myquery = { "name": { "$gt": "H" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

Le résultat de sortie est:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}

Requête utilisant des expressions régulières

Nous pouvons également utiliser des expressions régulières comme modificateurs.

Les modificateurs d'expressions régulières ne sont utilisés que pour rechercher dans des champs de chaînes.

L'exemple suivant lit les données où la première lettre du champ name est "R". La condition du modificateur d'expression régulière est{"$regex": "^R"} :

Exemple

#!/usr/bin/python3 import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myquery = { "name": { "$regex": "^R" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)

Le résultat de sortie est:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}

Retourner un nombre spécifié d'enregistrements

Si nous voulons limiter les résultats de la requête à un nombre spécifié d'enregistrements, nous pouvons utiliser la méthodelimit(), qui accepte uniquement un paramètre numérique.

L'exemple suivant retourne 3 enregistrements de documents :

Exemple

import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/") mydb = myclient["exampledb"] mycol = mydb["sites"] myresult = mycol.find().limit(3) # Afficher le résultat for x in myresult: print(x)

Le résultat de sortie est:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'EXAMPLE', 'alexa': '10000', 'url': 'https://www.example.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}

Python Mongodb Python MongoDB

Autres extensions