Esercizi Aggregazione MongoDB Python
- Esercizio 1: Aggregazione con pymongo (Sequenziale)
- Esercizio 2: Aggregazione con Condizione con pymongo (OOP)
- Esercizio 3: Aggregazione con motor (Sequenziale)
- Esercizio 4: Aggregazione con Condizione con motor (OOP)
- Esercizio 5: Aggregazione con Proiezione con pymongo (Sequenziale)
- Esercizio 6: Aggregazione con Proiezione con motor (OOP)
- Esercizio 7: Aggregazione con Ordinamento con pymongo (Sequenziale)
- Esercizio 8: Aggregazione con Ordinamento con motor (OOP)
Esercizi sull’aggregazione di dati in un database MongoDB utilizzando le librerie Python pymongo
e motor
. Gli esercizi includono approcci sequenziali e orientati agli oggetti (OOP).
Esercizio 1: Aggregazione con pymongo (Sequenziale)
Eseguire un'aggregazione semplice per calcolare la media degli stipendi utilizzando pymongo.
from pymongo import MongoClient
def aggregate_average_salary(): client = MongoClient('mongodb://localhost:27017/') db = client['testdb'] collection = db['employees'] pipeline = [ {"$group": {"_id": None, "average_salary": {"$avg": "$salary"}}} ] result = collection.aggregate(pipeline) for doc in result: print("Media degli stipendi:", doc["average_salary"]) client.close()
aggregate_average_salary()
Esercizio 2: Aggregazione con Condizione con pymongo (OOP)
Eseguire un'aggregazione con condizione per contare il numero di dipendenti in ogni dipartimento utilizzando pymongo e OOP.
from pymongo import MongoClient
class MongoDBConnection: def __init__(self, uri, db_name, collection_name): self.client = MongoClient(uri) self.db = self.client[db_name] self.collection = self.db[collection_name]
def aggregate_count_by_department(self): pipeline = [ {"$group": {"_id": "$department", "count": {"$sum": 1}}} ] result = self.collection.aggregate(pipeline) for doc in result: print("Dipartimento:", doc["_id"], "Numero di dipendenti:", doc["count"])
def close(self): self.client.close()
# Usodb_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'employees')db_connection.aggregate_count_by_department()db_connection.close()
Esercizio 3: Aggregazione con motor (Sequenziale)
Eseguire un'aggregazione semplice per calcolare il totale delle vendite utilizzando motor.
import motor.motor_asyncioimport asyncio
async def aggregate_total_sales(): client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017/') db = client['testdb'] collection = db['sales'] pipeline = [ {"$group": {"_id": None, "total_sales": {"$sum": "$amount"}}} ] async for doc in collection.aggregate(pipeline): print("Totale delle vendite:", doc["total_sales"]) client.close()
# Usoasyncio.run(aggregate_total_sales())
Esercizio 4: Aggregazione con Condizione con motor (OOP)
Eseguire un'aggregazione con condizione per contare il numero di ordini per ogni cliente utilizzando motor e OOP.
import motor.motor_asyncioimport asyncio
class MongoDBConnection: def __init__(self, uri, db_name, collection_name): self.client = motor.motor_asyncio.AsyncIOMotorClient(uri) self.db = self.client[db_name] self.collection = self.db[collection_name]
async def aggregate_count_by_customer(self): pipeline = [ {"$group": {"_id": "$customer_id", "count": {"$sum": 1}}} ] async for doc in self.collection.aggregate(pipeline): print("Cliente ID:", doc["_id"], "Numero di ordini:", doc["count"])
def close(self): self.client.close()
# Usoasync def main(): db_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'orders') await db_connection.aggregate_count_by_customer() db_connection.close()
asyncio.run(main())
Esercizio 5: Aggregazione con Proiezione con pymongo (Sequenziale)
Eseguire un'aggregazione con proiezione per mostrare solo i campi necessari utilizzando pymongo.
from pymongo import MongoClient
def aggregate_with_projection(): client = MongoClient('mongodb://localhost:27017/') db = client['testdb'] collection = db['employees'] pipeline = [ {"$group": {"_id": "$department", "average_salary": {"$avg": "$salary"}}}, {"$project": {"department": "$_id", "average_salary": 1, "_id": 0}} ] result = collection.aggregate(pipeline) for doc in result: print(doc) client.close()
aggregate_with_projection()
Esercizio 6: Aggregazione con Proiezione con motor (OOP)
Eseguire un'aggregazione con proiezione per mostrare solo i campi necessari utilizzando motor e OOP.
import motor.motor_asyncioimport asyncio
class MongoDBConnection: def __init__(self, uri, db_name, collection_name): self.client = motor.motor_asyncio.AsyncIOMotorClient(uri) self.db = self.client[db_name] self.collection = self.db[collection_name]
async def aggregate_with_projection(self): pipeline = [ {"$group": {"_id": "$department", "average_salary": {"$avg": "$salary"}}}, {"$project": {"department": "$_id", "average_salary": 1, "_id": 0}} ] async for doc in self.collection.aggregate(pipeline): print(doc)
def close(self): self.client.close()
# Usoasync def main(): db_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'employees') await db_connection.aggregate_with_projection() db_connection.close()
asyncio.run(main())
Esercizio 7: Aggregazione con Ordinamento con pymongo (Sequenziale)
Eseguire un'aggregazione con ordinamento dei risultati utilizzando pymongo.
from pymongo import MongoClient
def aggregate_with_sorting(): client = MongoClient('mongodb://localhost:27017/') db = client['testdb'] collection = db['employees'] pipeline = [ {"$group": {"_id": "$department", "total_salary": {"$sum": "$salary"}}}, {"$sort": {"total_salary": -1}} ] result = collection.aggregate(pipeline) for doc in result: print(doc) client.close()
aggregate_with_sorting()
Esercizio 8: Aggregazione con Ordinamento con motor (OOP)
Eseguire un'aggregazione con ordinamento dei risultati utilizzando motor e OOP.
import motor.motor_asyncioimport asyncio
class MongoDBConnection: def __init__(self, uri, db_name, collection_name): self.client = motor.motor_asyncio.AsyncIOMotorClient(uri) self.db = self.client[db_name] self.collection = self.db[collection_name]
async def aggregate_with_sorting(self): pipeline = [ {"$group": {"_id": "$department", "total_salary": {"$sum": "$salary"}}}, {"$sort": {"total_salary": -1}} ] async for doc in self.collection.aggregate(pipeline): print(doc)
def close(self): self.client.close()
# Usoasync def main(): db_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'employees') await db_connection.aggregate_with_sorting() db_connection.close()
asyncio.run(main())