Mọi truy vấn sử dụng JS có thể sử dụng lại hoặc nhận được ngữ cảnh JS hoàn toàn mới, trên đó các đối tượng JS được lưu trữ được tải. Để làm những gì bạn muốn, bạn cần:
- mongod tự động chạy mã được lưu trữ khi cài đặt nó
- ánh xạ để có một phương thức init
Đầu tiên chắc chắn là tính năng thú vị hơn, hóa ra rằng bản dựng mongodb v8 tự động làm điều đó (nhưng không được hỗ trợ chính thức), nhưng không phải là bản dựng spidermonkey chính thức.
Giả sử mã cửa hàng của bạn như:
db.system.js.save({ _id: "mylib", value: "myprint = function() { print('installed'); return 'installed';" }
Sau đó, trong v8, bạn có thể sử dụng myprint () một cách thoải mái trong mã của mình, nhưng với SM, bạn cần phải gọi mylib () một cách rõ ràng.
Để giải quyết vấn đề, bạn có thể tạo một phương pháp khác:
db.system.js.save({ _id: "installLib", value: "if (!libLoaded) mylib(); libLoaded = true;" }
Và gọi nó từ hàm map () của bạn.
Đã tạo phiếu để chuẩn hóa động cơ và cho phép chạy tự động: https://jira.mongodb.org / Browse / SERVER-4450