MongoDB: $graphLookup & Aggregate
Venerdì pomeriggio durante una chiamata col mio collega stavamo parlando di MongoDB per un lavoro ed è uscito in prima analisi uno scenario di lavoro interessante che -abituati a lavorare in SQL Server- ci lasciava spiazzati e con qualche timore.
La domanda che ci siamo posti era semplice ed è la seguente: come fare a riprodurre le CTE recursive in MongoDB?
$graphLookup & Aggregate
Ovviamente il dilemma non ha superato il fine settimana e mi sono messo a studiare subito per risolvere il nostro problema riproducendo il tutto in maniera -molto- minimale.
Ho scoperto che la soluzione -molto più semplice di quanto immaginassi- è ottenibile sfruttando graphLookup assieme ad Aggregate come mostrerà il seguente esempio.
PeopleDTO
Come primo passaggio creiamo un DTO di esempio con una relazione di parentela
- ID
- ParentID
In questo modo sara’ possibile risalire la catena e legare i diversi elementi tra di loro
|
|
MongoDBHelper
Per semplificare il tutto ho creato la classe MongoDBHelper con questa impronta.
|
|
L’ho definita per mostrarvi come viene definita IMongoCollection tramite la _collectionName fornita nel costruttore.
Query gerarchiche
Ora entriamo nel vivo dell’articolo: come faccio ad effettuare la query gerarchica per avere tutto il legame di parentela? Basterà sfruttare la combinazione di $graphLookup ed Aggregate come mostrato nel seguente esempio
|
|
Ho deciso di farvi ritornare un JSON darvi la possibilità’ di
- Vedere coi vostri occhi il risultato
- Capire come utilizzarlo nel vostro codice
- Lasciarvi l’opportunità di mettere mano al codice per fare pratica