Nhiều chức năng trợ giúp của trình bao không có sẵn để thực thi mã phía máy chủ. Trong trường hợp của printShardingStatus()
, điều đó có ý nghĩa vì không có bảng điều khiển để sử dụng cho đầu ra in và bạn muốn trả về một chuỗi. Rất may, bạn sẽ có thể lấy nguồn của hàm shell và thực hiện lại nó trong ứng dụng của mình (ví dụ:nối một chuỗi được trả về thay vì in trực tiếp).
$ mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.printShardingStatus
function (verbose) {
printShardingStatus(this.getSiblingDB("config"), verbose);
}
Vì vậy, hãy xem printShardingStatus()
chức năng ...
> printShardingStatus
function (configDB, verbose) {
if (configDB === undefined) {
configDB = db.getSisterDB("config");
}
var version = configDB.getCollection("version").findOne();
// ...
}
Trước khi chuyển tất cả các câu lệnh đầu ra thành nối chuỗi, bạn muốn đảm bảo rằng tất cả các phương thức DB khác đều có sẵn cho bạn. Về mặt hiệu suất, tôi nghĩ lựa chọn tốt nhất là chuyển các phần bên trong của hàm này sang Java và tránh hoàn toàn việc đánh giá JS phía máy chủ. Nếu bạn đi sâu hơn vào printShardingStatus()
, bạn sẽ thấy nó chỉ phát hành find()
trên cơ sở dữ liệu cấu hình cùng với một số group()
truy vấn.
Nếu bạn muốn tiếp tục đánh giá JS và không muốn giữ mã này trong ứng dụng Java của mình, bạn cũng có thể xem xét lưu trữ các hàm JS phía máy chủ .