Đánh giá chức năng lưu trữ trong db.system.js ("thủ tục lưu trữ", khi bạn muốn gọi cho họ đó) bị phản đối. Các bài viết trên db.eval shell function và the eval database command có cảnh báo "Không được chấp nhận kể từ phiên bản 3.0" và the article on server-sided javascript không đề cập đến nó nữa. Vì vậy, bạn nên tránh sử dụng nó. Một lý do là bạn không thể chạy một hàm javascript khi bạn sử dụng sharding. Vì vậy, khi bạn xây dựng một ứng dụng yêu cầu eval, bạn ngăn không cho nó mở rộng trong tương lai. Khác là chức năng javascript làm suy yếu khái niệm quyền. Họ luôn luôn cần phải được chạy như admin, mà làm cho nó không thể thiết lập một hệ thống cho phép sane. Điều này đặc biệt có vấn đề từ quan điểm bảo mật khi xem xét các kịch bản lệnh phía máy chủ sử dụng dữ liệu do người dùng cung cấp có thể dễ bị tấn công bởi các đoạn mã script tùy ý.
Lợi thế của javascript phía máy chủ là nó chạy trên máy chủ cơ sở dữ liệu. Điều này làm giảm độ trễ giữa máy chủ ứng dụng và máy chủ cơ sở dữ liệu khi bạn cần thực hiện một số lượng lớn các truy vấn. Nhưng bạn có thể có được lợi thế tương tự bằng cách mở một trình bao mongo trên máy chủ cơ sở dữ liệu và thực hiện nó ở đó.
Lợi thế thời gian chờ chỉ có liên quan khi bạn thực hiện nhiều truy vấn từ tập lệnh của mình. Khi bạn chỉ có một truy vấn, bạn sẽ vẫn có độ trễ khi gọi tập lệnh. Vì vậy, bạn không đạt được gì ngoại trừ sự phức tạp không cần thiết.
Không có bộ nhớ đệm bổ sung hoặc tối ưu hóa khác cho javascript phía máy chủ.Thậm chí tệ hơn: Nó sẽ nhận được reparsed và reinterpreted mỗi khi bạn chạy nó. Vì vậy, nó thậm chí có thể chậm hơn so với javascript trong máy chủ ứng dụng của bạn.
Hơn nữa, nhiều truy vấn phức tạp mà sẽ yêu cầu hỗ trợ kịch bản để thực hiện chỉ với find()
thường có thể được thể hiện bằng aggregation mà sẽ ở hầu hết các trường hợp được xa nhanh hơn so với làm việc cùng với find()
và javascript vì khuôn khổ tập hợp được thực hiện trong C++ và có quyền truy cập vào tài liệu BSON thô.
Giữ một câu hỏi cho mỗi bài đăng. SO không cho phép hỏi 4 câu hỏi cùng một lúc. –
@Salvador Những câu hỏi này đều liên quan chặt chẽ, tôi thấy ít điểm trong việc chia nhỏ chúng thành ba bài viết riêng biệt. – deceze
1: Không, 2: Không, 3: Tất nhiên không phải – Sammaye