MongoDB non supporta l’isolamento completo delle transazioni in stile ACID (Atomicity, Consistency, Isolation, Durability) come i database relazionali. Tuttavia, MongoDB supporta operazioni atomiche a livello di singolo documento.
Con l’aggiunta delle transazioni nei multi-documenti a partire da MongoDB 4.0, è possibile raggiungere un certo grado di isolamento delle transazioni eseguendo operazioni su più documenti all’interno di una singola sessione. Tuttavia, ci sono alcune restrizioni e potrebbero esserci conflitti di blocco.
Ecco i passaggi generali per configurare una transazione multi-documento in MongoDB:
1. Creare una nuova sessione:
```
let session = db.getMongo().startSession()
```
1. Avviare una transazione sulla sessione:
```
session.startTransaction( { readConcern: { level: ‘snapshot’ }, writeConcern: { w: ‘majority’ } } )
```
1. Eseguire le operazioni desiderate nella sessione. Ad esempio, se si desidera aggiornare due collezioni correlate:
```
let coll1 = session.getDatabase(‘test’).getCollection(‘coll1’);
let coll2 = session.getDatabase(‘test’).getCollection(‘coll2’);
coll1.insert({ x: 1 });
coll2.insert({ y: 2 });
```
1. Fare il commit della transazione. Se il commit ha esito positivo, allora tutte le operazioni della transazione vengono applicate. Se il commit fallisce, allora tutte le operazioni della transazione vengono annullate.
```
session.commitTransaction()
```
1. Chiudere la sessione:
```
session.endSession()
```
Si prega di notare che le transazioni multi-documento in MongoDB possono comportare un overhead significativo, quindi utilizzarle solo quando necessario. Nel più dei casi, le operazioni atomiche sui singoli documenti sono sufficienti.