Esercizi Indicizzazione MongoDB Python
Codegrind Team•Jul 10 2024
Esercizi sull’indicizzazione 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: Creazione di un indice semplice con pymongo (Sequenziale)
Creare un indice su una singola colonna utilizzando pymongo. Questo indice velocizzerà le query basate sul campo "name".
from pymongo import MongoClient
def create_simple_index():
client = MongoClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['employees']
result = collection.create_index("name")
print("Indice creato:", result)
client.close()
create_simple_index()
Esercizio 2: Creazione di un indice composto con pymongo (OOP)
Creare un indice composto su più colonne ("name" e "position") utilizzando pymongo. Questo indice migliorerà le prestazioni delle query che filtrano su entrambi i campi.
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 create_compound_index(self):
result = self.collection.create_index([("name", 1), ("position", 1)])
print("Indice composto creato:", result)
def close(self):
self.client.close()
# Uso
db_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'employees')
db_connection.create_compound_index()
db_connection.close()
Esercizio 3: Creazione di un indice unico con motor (Sequenziale)
Creare un indice unico sul campo "email" utilizzando motor. Questo indice garantirà l'unicità dei valori di "email" nella collezione.
import motor.motor_asyncio
import asyncio
async def create_unique_index():
client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['employees']
result = await collection.create_index("email", unique=True)
print("Indice unico creato:", result)
client.close()
# Uso
asyncio.run(create_unique_index())
Esercizio 4: Creazione di un indice testo con motor (OOP)
Creare un indice di testo sul campo "description" utilizzando motor. Questo indice permetterà ricerche full-text sulla descrizione.
import motor.motor_asyncio
import 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 create_text_index(self):
result = await self.collection.create_index([("description", "text")])
print("Indice di testo creato:", result)
def close(self):
self.client.close()
# Uso
async def main():
db_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'products')
await db_connection.create_text_index()
db_connection.close()
asyncio.run(main())
Esercizio 5: Visualizzazione degli indici esistenti con pymongo (Sequenziale)
Visualizzare tutti gli indici esistenti nella collezione "employees" utilizzando pymongo. Questo esercizio aiuta a capire quali indici sono già presenti.
from pymongo import MongoClient
def list_indexes():
client = MongoClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['employees']
indexes = collection.index_information()
for index_name, index_info in indexes.items():
print(f"Indice: {index_name}, Info: {index_info}")
client.close()
list_indexes()
Esercizio 6: Eliminazione di un indice con pymongo (OOP)
Eliminare un indice esistente dalla collezione "employees" utilizzando pymongo. Specificare il nome dell'indice da eliminare.
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 drop_index(self, index_name):
result = self.collection.drop_index(index_name)
print("Indice eliminato:", result)
def close(self):
self.client.close()
# Uso
db_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'employees')
db_connection.drop_index("name_1")
db_connection.close()
Esercizio 7: Creazione di un indice geospaziale con motor (Sequenziale)
Creare un indice geospaziale sul campo "location" utilizzando motor. Questo indice permette ricerche basate sulla posizione geografica.
import motor.motor_asyncio
import asyncio
async def create_geospatial_index():
client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017/')
db = client['testdb']
collection = db['places']
result = await collection.create_index([("location", "2dsphere")])
print("Indice geospaziale creato:", result)
client.close()
# Uso
asyncio.run(create_geospatial_index())
Esercizio 8: Creazione e utilizzo di un indice hash con motor (OOP)
Creare un indice hash sul campo "user_id" utilizzando motor. Questo indice migliorerà le prestazioni delle query che cercano un valore specifico di "user_id".
import motor.motor_asyncio
import 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 create_hashed_index(self):
result = await self.collection.create_index([("user_id", "hashed")])
print("Indice hash creato:", result)
def close(self):
self.client.close()
# Uso
async def main():
db_connection = MongoDBConnection('mongodb://localhost:27017/', 'testdb', 'users')
await db_connection.create_hashed_index()
db_connection.close()
asyncio.run(main())