Trong MongoDB, cursor.map()
phương thức áp dụng một hàm cho mỗi tài liệu được con trỏ truy cập và kết hợp các giá trị trả về trong một mảng.
Cú pháp
Cú pháp như sau:
db.collection.find().map(<function>)
Nơi collection
là tên của bộ sưu tập chứa các tài liệu.
Và <function>
ở đâu là chức năng áp dụng cho mỗi tài liệu mà con trỏ truy cập.
Ví dụ
Giả sử chúng ta có một bộ sưu tập được gọi là products
chứa ba tài liệu sau:
{ "_id" : 1, "product" : "Left Handed Screwdriver" }
{ "_id" : 2, "product" : "Left Blinker" }
{ "_id" : 3, "product" : "Long Weight" }
Chúng ta có thể sử dụng map()
kết hợp với find()
để lặp lại các tài liệu đó trong khi áp dụng một hàm cho mỗi tài liệu.
Ví dụ:
db.products.find().map(
function(p) {
p = p.product.replace("Left","Right");
return p;
}
);
Kết quả:
[ "Right Handed Screwdriver", "Right Blinker", "Long Weight" ]
Trong trường hợp này, chúng tôi đã lặp lại qua con trỏ và thay thế các bản sao của chuỗi Left
với Right
. Sau đó chúng tôi trả kết quả.
Kết quả được trả về dưới dạng một mảng.
Lỗi?
Nếu bạn gặp lỗi, như sau:
uncaught exception: TypeError: db.products.findOne(...).map is not a function : @(shell):1:1
Đảm bảo rằng bạn đang sử dụng find()
chứ không phải findOne()
.
findOne()
phương thức trả về tài liệu thực chứ không phải con trỏ. Do đó, map()
sẽ không hoạt động với findOne()
. Ngoài ra, ngay cả khi nó hoạt động, findOne()
chỉ trả về một tài liệu duy nhất và do đó, sẽ không cần phải lặp lại nhiều tài liệu.