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.