W MongoDB cursor.map() metoda stosuje funkcję do każdego dokumentu odwiedzanego przez kursor i łączy zwracane wartości w tablicę.
Składnia
Składnia wygląda tak:
db.collection.find().map(<function>)
Gdzie kolekcja to nazwa kolekcji, w której znajdują się dokumenty.
A gdzie
Przykład
Załóżmy, że mamy kolekcję o nazwie produkty który zawiera następujące trzy dokumenty:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
Możemy użyć map() metoda w połączeniu z find() metoda iteracji przez te dokumenty, przy jednoczesnym zastosowaniu funkcji do każdego dokumentu.
Przykład:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
); Wynik:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
W tym przypadku przeszliśmy przez kursor i zastąpiliśmy instancje ciągu Left z Prawo . Następnie zwróciliśmy wynik.
Wynik jest zwracany jako tablica.
Błąd?
Jeśli pojawi się błąd, taki jak ten:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Upewnij się, że używasz find() a nie findOne() .
findOne() Metoda zwraca rzeczywisty dokument, a nie kursor. Dlatego map() nie będzie działać z findOne() . Ponadto, nawet jeśli to zadziałało, findOne() zwraca tylko jeden dokument, a zatem nie ma potrzeby przeglądania wielu dokumentów.