0% ont trouvé ce document utile (0 vote)
212 vues12 pages

4 MongoDB

Le document décrit comment se connecter à une base de données MongoDB et effectuer des requêtes depuis Python en utilisant la bibliothèque PyMongo. Il explique comment créer une connexion, sélectionner une base de données et une collection, et insérer et récupérer des documents.

Transféré par

broaymene
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
212 vues12 pages

4 MongoDB

Le document décrit comment se connecter à une base de données MongoDB et effectuer des requêtes depuis Python en utilisant la bibliothèque PyMongo. Il explique comment créer une connexion, sélectionner une base de données et une collection, et insérer et récupérer des documents.

Transféré par

broaymene
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Gestion de données

Partie N°4 - Effectuer des requêtes depuis


Python
1. Présentation et installation
Présentation
PyMongo est une librairie Python contenant des outils pour travailler avec MongoD, elle est maintenue
par les développeurs de MongoDB officiel ce qui en fait la référence dans Python :
https://www.mongodb.com/docs/drivers/pymongo/
Python a besoin de la librairie pymongo pour accéder à une base de données MongoDB.
Installation de PyMongo
Pour installer PyMongo taper la commande suivant dans votre terminal :
python -m pip install pymongo

Pour tester si l'installation a réussi, créer et exécuter une page Python avec le contenu suivant :
import pymongo

Réalisé Par : SOUFIANE AIT TALEB Page 1 sur 12


Gestion de données

2. Connexion au serveur de base de données MongoDB


Créer la connexion
La première étape consiste à créer une connexion avec nos bases de données sur le serveur de
MongoDB. Pour cela il faut :
1. Créer un objet de la classe MongoClient de la librairie pymongo.
2. Passer comme paramètre à l’objet MongoClient la chaîne de connexion vers le serveur
MongoDB. Pour cela vous avez plusieurs façons :
client = pymongo.MongoClient("mongodb://localhost:27017")
client = pymongo.MongoClient(host='localhost', port=27017)
client = pymongo.MongoClient() # se connecte par défaut au serveur local
client = pymongo.MongoClient("mongodb://[user:password@]localhost:27017/")

Exemple 1 :
import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017")
print(client)
----------------------------------------------------------------------------------
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False,
connect=True)
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
print(client)
----------------------------------------------------------------------------------
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False,
connect=True)
----------------------------------------------------------------------------------
Afficher les bases de données du serveur MongoDB
Dans python on peut afficher la liste des bases de données qui se trouve sur le serveur à l’aide de la
méthode list_database_names() de l’objet MongoClient.
Exemple :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
print(client.list_database_names())
----------------------------------------------------------------------------------
['admin', 'coffeeshop', 'config', 'local', 'myDB']
----------------------------------------------------------------------------------
L’objet client est une instance de la classe MongoClient où on retrouve les informations de la connexion.

Réalisé Par : SOUFIANE AIT TALEB Page 2 sur 12


Gestion de données

Se connecter à une base de données MongoDB


Pour se connecter à une base de données on peut utiliser les deux syntaxes suivantes :
my_database = MongoClient_object['database_name']
my_database = MongoClient_object.database_name
Exemple 1 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
print(my_db)
----------------------------------------------------------------------------------
Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop')
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client.coffeeshop
print(my_db)
----------------------------------------------------------------------------------
Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop')
----------------------------------------------------------------------------------
L’objet my_db est une instance de la classe Database.
Afficher les collections de la base de données
Dans python on peut afficher les collections d’une base de données MongoDB on utiliser la méthode
list_collection_names() de l’objet Database.
Exemple 1 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
print(my_db.list_collection_names())
----------------------------------------------------------------------------------
['sales']
----------------------------------------------------------------------------------

Réalisé Par : SOUFIANE AIT TALEB Page 3 sur 12


Gestion de données

Accéder à une collection d’une base de données MongoDB


Pour accéder à une collection on peut utiliser les deux syntaxes suivantes :
my_collection = my_database_object['collection_name']
my_collection = my_database_object.collection_name
Exemple 1 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
my_collection = my_db['sales']
print(my_collection)
----------------------------------------------------------------------------------
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop'), 'sales')
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client['coffeeshop']
my_collection = my_db.sales
print(my_collection)
----------------------------------------------------------------------------------
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict,
tz_aware=False, connect=True), 'coffeeshop'), 'sales')
----------------------------------------------------------------------------------
L’objet my_collection est une instance de la classe Collection.
Créer une base de données MongoDB
Pour créer une base de données dans MongoDB, on utilise la même syntaxe pour accéder à une base
de données MongoDB avec l’objet MongoClient, et MongoDB va créer la base de données si elle
n'existe pas.
Exemple :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db_name = input("Database name to create : ")
db_list = client.list_database_names()
if my_db_name in db_list:
print("The database exists.")
else:
my_db = client[my_db_name];
print("Database created successfully.")

Réalisé Par : SOUFIANE AIT TALEB Page 4 sur 12


Gestion de données

----------------------------------------------------------------------------------
Database name to create : coffeeshop
The database exists.
----------------------------------------------------------------------------------
Database name to create : shop
Database created successfully.
----------------------------------------------------------------------------------
Dans MongoDB, une base de données n'est pas créée tant qu'elle n'a pas de contenu. Donc on doit
créer aussi une collection avec des documents.
Créer une collection dans une base de données MongoDB
Pour créer une collection dans une base de données MongoDB, on utilise la même syntaxe pour accéder
à une collection avec l’objet Database, et MongoDB va créer la collection si elle n'existe pas.
Exemple :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["coffeeshop"];

my_collection_name = input("Collection name to create : ")


collection_list = my_db.list_collection_names()
if my_collection_name in collection_list:
print("The collection exists.")
else:
my_collection = my_db[my_collection_name];
print("Collection created successfully.")
----------------------------------------------------------------------------------
Collection name to create : sales
The collection exists.
----------------------------------------------------------------------------------
Collection name to create : ventes
Collection created successfully.
----------------------------------------------------------------------------------
On remarque aussi que la collection n’est pas créée tant qu'elle n'a pas de contenu.

Réalisé Par : SOUFIANE AIT TALEB Page 5 sur 12


Gestion de données

3. Requêtes depuis Python


Insérer dans une collection
Pour insérer un document dans une collection on utilise les deux méthodes :
▪ Collection_object.insert_one({object_1}) : pour insérer un seul document
▪ Collection_object.insert_many([{object_1},{object_2}, …]) : pour insérer plusieurs
documents.
Exemple 1 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]

student1_ = {
"_id":101,
"name": "Mike",
"age": 30,
"gender": "Male",
"graduated": False,
"address": {
"street": "123 Main Street",
"city": "Start City"
},
"courses": ["C#", "SQL", "PHP" ]
}

x= students.insert_one(student1_)
print(x)
----------------------------------------------------------------------------------
<pymongo.results.InsertOneResult object at 0x0000028FA8657B50>
----------------------------------------------------------------------------------
Exemple 2 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]

students_list = [{
"_id":102,
"name": "Mary",
"age": 28,

Réalisé Par : SOUFIANE AIT TALEB Page 6 sur 12


Gestion de données

"gender": "Female",
"graduated": True,
"address": {
"street": "99 George Street",
"city": "Super City"
},
"courses": [ "ASP.NET", "LINQ", "Angular" ]
},
{
"_id":103,
"name": "Pam",
"age": 29,
"gender": "Female",
"graduated": False,
"address": {
"street": "101 King Street",
"city": "Mongo City"
},
"courses": [".NET Core", "C++", "Bootstrap" ]
},
{
"_id":104,
"name": "Ben",
"age": 31,
"gender": "Male",
"graduated": True,
"address": {
"street": "35 Queen Street",
"city": "London"
},
"courses": ["JavaScript", "C#", "HTML" ]
}
]
x= students.insert_many(students_list)
print(x)
----------------------------------------------------------------------------------
<pymongo.results.InsertManyResult object at 0x0000023D93B43F70>
----------------------------------------------------------------------------------

Réalisé Par : SOUFIANE AIT TALEB Page 7 sur 12


Gestion de données

Afficher les documents d’une collection


Pour afficher les documents d’une collection on peut utiliser les deux méthodes suivantes :
▪ Collection_name.find({query},{prejection})
▪ Collection_name.find_one({query},{prejection})

Exemple 1 : afficher les documents de la collection students


from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]

result = students.find_one()
print(result)

results = students.find()
print(results)

for student in results:


print(student,end='\n\n')
----------------------------------------------------------------------------------
{'_id': 101, 'name': 'Mike', 'age': 30, 'gender': 'Male', 'graduated': False,
'address': {'street': '123 Main Street', 'city': 'Start City'}, 'courses': ['C#',
'SQL', 'PHP']}
<pymongo.cursor.Cursor object at 0x0000025ACAE179A0>
{'_id': 101, 'name': 'Mike', 'age': 30, 'gender': 'Male', 'graduated': False,
'address': {'street': '123 Main Street', 'city': 'Start City'}, 'courses': ['C#',
'SQL', 'PHP']}

{'_id': 102, 'name': 'Mary', 'age': 28, 'gender': 'Female', 'graduated': True,
'address': {'street': '99 George Street', 'city': 'Super City'}, 'courses':
['ASP.NET', 'LINQ', 'Angular']}

{'_id': 103, 'name': 'Pam', 'age': 29, 'gender': 'Female', 'graduated': False,
'address': {'street': '101 King Street', 'city': 'Mongo City'}, 'courses': ['.NET
Core', 'C++', 'Bootstrap']}

{'_id': 104, 'name': 'Ben', 'age': 31, 'gender': 'Male', 'graduated': True,
'address': {'street': '35 Queen Street', 'city': 'London'}, 'courses':
['JavaScript', 'C#', 'HTML']}
----------------------------------------------------------------------------------

Réalisé Par : SOUFIANE AIT TALEB Page 8 sur 12


Gestion de données

Exemple 2 : afficher seulement les documents avec l’âge inférieur ou égale à 29 et projeter seulement
les champs : name et age
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]

for student in students.find({"age":{"$lte":29}},{"name":1, "age":1,"_id":0}):


print(student,end='\n\n')
----------------------------------------------------------------------------------
{'name': 'Mary', 'age': 28}

{'name': 'Pam', 'age': 29}


----------------------------------------------------------------------------------

Exemple 3 : afficher les informations de l’étudiant le plus âgé. La méthode sort("field" :1|-1) permet
de faire un tri avec ordre croissant si la valeur égale à 1 ou bien un tri décroissant si -1
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
results = students.find().sort("age",-1).limit(1)

for student in results :


print(student)
----------------------------------------------------------------------------------
{'_id': 104, 'name': 'Ben', 'age': 31, 'gender': 'Male', 'graduated': True,
'address': {'street': '35 Queen Street', 'city': 'London'}, 'courses':
['JavaScript', 'C#', 'HTML']}
----------------------------------------------------------------------------------
Modifier les documents d’une collection
Il existe deux méthodes pour modifier les documents dans une base de données MongoDB :
▪ Collection_object.update_one({Selection_Criteria},{"$set" : {Update_Data}}) : modifier un
seul document dans la collection.
▪ Collection_object.update_many({Selection_Criteria},{"$set" : {Update_Data}}) : modifier
plusieurs documents dans la collection.

Réalisé Par : SOUFIANE AIT TALEB Page 9 sur 12


Gestion de données

Exemple 1 : On veut modifier l’âge de l’étudiant avec _id=102 :


from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]
print(students.find_one({"_id":102}))
students.update_one({"_id":102},{"$set":{"age":30}})
print()
print(students.find_one({"_id":102}))
----------------------------------------------------------------------------------
{'_id': 102, 'name': 'Mary', 'age': 28, 'gender': 'Female', 'graduated': True,
'address': {'street': '99 George Street', 'city': 'Super City'}, 'courses':
['ASP.NET', 'LINQ', 'Angular']}

{'_id': 102, 'name': 'Mary', 'age': 30, 'gender': 'Female', 'graduated': True,
'address': {'street': '99 George Street', 'city': 'Super City'}, 'courses':
['ASP.NET', 'LINQ', 'Angular']}
----------------------------------------------------------------------------------
Exemple 2 : On veut modifier mette à jour tous les documents dont le nom commence par la lettre
"M":
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]

query = {"name":{"$regex":"^M"}}
update = {"$set":{"address.city":"Alpha City"}}

x = students.update_many(query,update)

print(x.modified_count, "documents updated.")


----------------------------------------------------------------------------------
2 documents updated.
----------------------------------------------------------------------------------

Réalisé Par : SOUFIANE AIT TALEB Page 10 sur 12


Gestion de données

Supprimer les documents d’une collection


Il existe deux méthodes pour supprimer les documents d’une collection MongoDB :
▪ Collection_object.delete_one({query}) : supprimer un seul document dans la collection.
▪ Collection_object.delete_many({query}) : supprimer plusieurs documents dans la collection.

Exemple 1 : Supprimer le premier élément de la collection students où le cham name égale à "Mary"
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]

x = students.delete_one({"name":"Mary"})

print(x.deleted_count, "document deleted.")


----------------------------------------------------------------------------------
1 document deleted.
----------------------------------------------------------------------------------
Exemple 2 : Supprimer tous les éléments de la collection students dont le champ age est inférieur pu
égale à 30 :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["mydatabase"]
students = my_db["students"]

x = students.delete_many({"age":{"$lte":30}})

print(x.deleted_count, "documents deleted.")


----------------------------------------------------------------------------------
2 documents deleted.
----------------------------------------------------------------------------------

Réalisé Par : SOUFIANE AIT TALEB Page 11 sur 12


Gestion de données

Utiliser l’agrégation
On va travailler dans cette partie dans la base de données coffeeshop.
Exemple : on veut regrouper les ventes par item et afficher le total des quantités pour chaque item :
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
my_db = client["coffeeshop"]
sales = my_db["sales"]

results =
sales.aggregate([{"$group":{"_id":"$item","totalQuantity":{"$sum":"$quantity"}}}])

for result in results:


print(result,end='\n\n')
----------------------------------------------------------------------------------
{'_id': 'Cappuccino', 'totalQuantity': 49}

{'_id': 'Mochas', 'totalQuantity': 11}

{'_id': 'Americanos', 'totalQuantity': 70}

{'_id': 'Lattes', 'totalQuantity': 55}


----------------------------------------------------------------------------------

Réalisé Par : SOUFIANE AIT TALEB Page 12 sur 12

Vous aimerez peut-être aussi