In MongoDB, il cursor.map()
applica una funzione a ogni documento visitato dal cursore e combina i valori restituiti in un array.
Sintassi
La sintassi è questa:
db.collection.find().map(<function>)
Dove collection
è il nome della collezione in cui risiedono i documenti.
E dove <function>
è la funzione da applicare ad ogni documento visitato dal cursore.
Esempio
Supponiamo di avere una collezione chiamata products
che contiene i seguenti tre documenti:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
Possiamo usare map()
metodo insieme a find()
metodo per scorrere quei documenti, applicando una funzione a ciascun documento.
Esempio:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
);
Risultato:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
In questo caso, abbiamo ripetuto il cursore e abbiamo sostituito le istanze della stringa Left
con Right
. Abbiamo quindi restituito il risultato.
Il risultato viene restituito come una matrice.
Errore?
Se ricevi un errore, come questo:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Assicurati di utilizzare find()
e non findOne()
.
Il findOne()
il metodo restituisce il documento effettivo e non un cursore. Pertanto, map()
non funzionerà con findOne()
. Inoltre, anche se ha funzionato, findOne()
restituisce solo un singolo documento e, pertanto, non sarebbe necessario scorrere più documenti.