In MongoDB, de cursor.map()
methode past een functie toe op elk document dat door de cursor wordt bezocht en combineert de geretourneerde waarden in een array.
Syntaxis
De syntaxis gaat als volgt:
db.collection.find().map(<function>)
Waar collection
is de naam van de collectie waarin de documenten zich bevinden.
En waar <function>
is de functie die moet worden toegepast op elk document dat door de cursor wordt bezocht.
Voorbeeld
Stel dat we een verzameling hebben met de naam products
die de volgende drie documenten bevat:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
We kunnen de map()
. gebruiken methode in combinatie met de find()
methode om door die documenten te bladeren, terwijl u een functie op elk document toepast.
Voorbeeld:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
);
Resultaat:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
In dit geval hebben we de cursor herhaald en instanties van de tekenreeks Left
. vervangen met Right
. We hebben het resultaat toen teruggestuurd.
Het resultaat wordt geretourneerd als een array.
Fout?
Als u een foutmelding krijgt, zoals deze:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Zorg ervoor dat u find()
. gebruikt en niet findOne()
.
De findOne()
methode retourneert het eigenlijke document en niet een cursor. Daarom, map()
werkt niet met findOne()
. En zelfs als het wel zou werken, findOne()
retourneert slechts één document en daarom is het niet nodig om door meerdere documenten te bladeren.