MapReduce in MongoDB è uno strumento che consente di eseguire calcoli di dati complessi e aggregazioni in un ambiente distribuito.
Ecco come può essere utilizzato:
1. Definire una funzione map: la funzione map prende un documento come input e restituisce coppie chiave/valore.
```
var mapFunction = function() {
emit(this.key, this.value);
};
```
1. Definire una funzione reduce: la funzione reduce raggruppa tutte le coppie chiave/valore con la stessa chiave.
```
var reduceFunction = function(key, values) {
return Array.sum(values);
};
```
1. Chiamare la funzione MapReduce:
```
db.collection.mapReduce(
mapFunction,
reduceFunction,
{ out: “map_reduce_output” }
)
```
Il comando `mapReduce` prende tre parametri: la funzione `map`, la funzione `reduce` e un documento di opzioni. Nel documento di opzioni, specificare un campo `out` per indicare il nome della collezione in cui si desidera che vengano scritti i risultati.
Gli script `map` e `reduce` sono eseguiti su MongoDB, perciò devono essere scritti in JavaScript. La funzione `map` trasforma un documento in una o più coppie chiave/valore e la funzione `reduce` combina coppie chiave/valore con la stessa chiave.
Essere consapevoli che MapReduce in MongoDB non è sempre la scelta migliore per l’elaborazione dei dati in MongoDB a causa del suo overhead di esecuzione. Per le aggregazioni semplici è più efficiente utilizzare le pipeline di aggregazione di MongoDB. MapReduce è molto potente quando si lavora con grandi quantità di dati e si eseguono calcoli complessi che non possono essere espressi efficacemente con l’aggregazione.