V MongoDB, cursor.map()
metoda aplikuje funkci na každý dokument navštívený kurzorem a kombinuje návratové hodnoty v poli.
Syntaxe
Syntaxe vypadá takto:
db.collection.find().map(<function>)
Kde collection
je název sbírky, ve které se dokumenty nacházejí.
A kde <function>
je funkce, která se použije na každý dokument navštívený kurzorem.
Příklad
Předpokládejme, že máme kolekci nazvanou products
který obsahuje následující tři dokumenty:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
Můžeme použít map()
ve spojení s metodou find()
metodu pro iteraci těchto dokumentů, přičemž na každý dokument aplikuje funkci.
Příklad:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
);
Výsledek:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
V tomto případě jsme iterovali kurzorem a nahradili instance řetězce Left
s Right
. Poté jsme vrátili výsledek.
Výsledek je vrácen jako pole.
Chyba?
Pokud se zobrazí chyba, jako je tato:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Ujistěte se, že používáte find()
a ne findOne()
.
findOne()
metoda vrací skutečný dokument a ne kurzor. Proto map()
nebude fungovat s findOne()
. Také, i když to fungovalo, findOne()
vrací pouze jeden dokument, a proto by nebylo nutné procházet více dokumenty.