В MongoDB, cursor.map()
методът прилага функция към всеки документ, посетен от курсора, и комбинира върнатите стойности в масив.
Синтаксис
Синтаксисът е така:
db.collection.find().map(<function>)
Където collection
е името на колекцията, в която се намират документите.
И къде <function>
е функцията, която се прилага към всеки документ, посетен от курсора.
Пример
Да предположим, че имаме колекция, наречена products
който съдържа следните три документа:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
Можем да използваме map()
метод във връзка с find()
метод за итерация през тези документи, като същевременно се прилага функция към всеки документ.
Пример:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
);
Резултат:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
В този случай повторихме курсора и заменихме екземпляри на низа Left
с Right
. След това върнахме резултата.
Резултатът се връща като масив.
Грешка?
Ако получите грешка, по следния начин:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Уверете се, че използвате find()
а не findOne()
.
findOne()
метод връща действителния документ, а не курсор. Следователно, map()
няма да работи с findOne()
. Също така, дори и да работи, findOne()
връща само един документ и следователно няма да има нужда от повторение през множество документи.