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.