I MongoDB er cursor.map()
metoden anvender en funktion på hvert dokument, der besøges af markøren og kombinerer returværdierne i en matrix.
Syntaks
Syntaksen ser sådan ud:
db.collection.find().map(<function>)
Hvor samling
er navnet på den samling, som dokumenterne ligger i.
Og hvor
Eksempel
Antag, at vi har en samling kaldet produkter
der indeholder følgende tre dokumenter:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
Vi kan bruge map()
metode i forbindelse med find()
metode til at iterere gennem disse dokumenter, mens du anvender en funktion på hvert dokument.
Eksempel:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
);
Resultat:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
I dette tilfælde itererede vi gennem markøren og erstattede forekomster af strengen Left
med Højre
. Så returnerede vi resultatet.
Resultatet returneres som et array.
Fejl?
Hvis du får en fejl, som denne:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Sørg for, at du bruger find()
og ikke findOne()
.
findOne()
metoden returnerer det faktiske dokument og ikke en markør. Derfor map()
virker ikke med findOne()
. Også selvom det virkede, findOne()
returnerer kun et enkelt dokument, og derfor ville der ikke være behov for at gentage flere dokumenter.