I MongoDB, cursor.map()
Metoden tillämpar en funktion på varje dokument som markören besöker och kombinerar returvärdena i en array.
Syntax
Syntaxen ser ut så här:
db.collection.find().map(<function>)
Där samling
är namnet på samlingen som handlingarna finns i.
Och där
Exempel
Anta att vi har en samling som heter produkter
som innehåller följande tre dokument:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
Vi kan använda map()
metod i kombination med find()
metod för att iterera genom dessa dokument, samtidigt som en funktion tillämpas på varje dokument.
Exempel:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
);
Resultat:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
I det här fallet itererade vi genom markören och ersatte instanser av strängen Left
med Höger
. Vi returnerade sedan resultatet.
Resultatet returneras som en array.
Fel?
Om du får ett felmeddelande, så här:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Se till att du använder find()
och inte findOne()
.
findOne()
metod returnerar det faktiska dokumentet och inte en markör. Därför map()
fungerar inte med findOne()
. Även om det fungerade, findOne()
returnerar bara ett enda dokument, och därför skulle det inte finnas något behov av att upprepa flera dokument.