MongoDB è un database NoSQL orientato ai documenti che offre una vasta gamma di funzionalità avanzate pensate per supportare applicazioni moderne, scalabili e ad alte prestazioni. In questo articolo esamineremo alcune delle funzionalità più potenti offerte da MongoDB.
1. Aggregation Framework
Il framework di aggregazione di MongoDB consente di elaborare e trasformare i dati direttamente all'interno del database. È possibile eseguire operazioni complesse come filtri, raggruppamenti, ordinamenti e trasformazioni senza dover esportare i dati.
db.ordini.aggregate([
{ $match: { status: "completato" } },
{ $group: { _id: "$clienteId", totale: { $sum: "$importo" } } },
{ $sort: { totale: -1 } }
])
2. Indicizzazione Avanzata
MongoDB supporta vari tipi di indici oltre agli indici standard, tra cui:
- Indici geospaziali per ricerche basate su coordinate.
- Indici testuali per eseguire ricerche full-text.
- Indici composti e multikey per array e campi multipli.
db.luoghi.createIndex({ posizione: "2dsphere" })
db.articoli.createIndex({ contenuto: "text" })
3. Change Streams
Le Change Streams permettono di ascoltare in tempo reale i cambiamenti sui dati in una collezione, database o intero cluster. Questa funzionalità è particolarmente utile per applicazioni in tempo reale.
const changeStream = db.collection('ordini').watch()
changeStream.on('change', (change) => {
console.log('Modifica rilevata:', change)
})
4. Transazioni Multi-Documento
A partire dalla versione 4.0, MongoDB supporta le transazioni ACID su più documenti, consentendo operazioni complesse con la garanzia dell'integrità dei dati.
const session = await client.startSession()
session.startTransaction()
try {
await db.collection('utenti').updateOne({ _id: 1 }, { $inc: { saldo: -100 } }, { session })
await db.collection('ordini').insertOne({ utenteId: 1, importo: 100 }, { session })
await session.commitTransaction()
} catch (error) {
await session.abortTransaction()
} finally {
session.endSession()
}
5. Sharding
Lo sharding consente a MongoDB di distribuire i dati su più server, migliorando la scalabilità orizzontale. È ideale per gestire grandi volumi di dati e carichi di lavoro distribuiti.
sh.enableSharding("negozio")
sh.shardCollection("negozio.prodotti", { categoria: 1 })
Conclusione
MongoDB non è solo un database documentale semplice da usare, ma anche uno strumento potente con funzionalità avanzate in grado di supportare scenari complessi. Sfruttando appieno il framework di aggregazione, le transazioni, le Change Streams e il supporto allo sharding, è possibile costruire applicazioni moderne, resilienti e scalabili.