2012-01-04 26 views
5

Tôi đang cố gắng lấy kết quả của lệnh db.stats() mongo shell trong mã python của tôi (cho mục đích giám sát).MongoDB: cách lấy db.stats() từ API

Nhưng không giống như ví dụ serverStatus Tôi không thể làm db.command('stats'). Tôi không thể tìm thấy bất kỳ tương đương API nào trong tài liệu mongodb. Tôi cũng đã thử các biến thể với db.$cmd nhưng không có biến thể nào hoạt động.

Vì vậy,

câu hỏi nhỏ: làm thế nào tôi có thể nhận được kết quả của db.stats() (số lượng kết nối/đối tượng, kích thước dữ liệu & chỉ số, vv) trong mã python của tôi?

Câu hỏi lớn hơn: bất cứ ai có thể giải thích lý do tại sao một số lệnh shell có thể truy cập dễ dàng từ API, trong khi các lệnh khác thì không? Rất khó chịu: một số công cụ liên quan đến quản trị viên có thể truy cập qua db.$cmd.sys, một số thông qua db.command, một số thông qua ...? Có một số tiêu chuẩn hoặc giải thích về tình trạng này?

PS: MongoDB 2.0.2, 2.1.0 pymongo, python 2.7

Trả lời

10

Các Javascript vỏ của stats lệnh helper thực sự gọi một lệnh tên dbstats, mà bạn có thể chạy từ PyMongo sử dụng Database.command method. Cách dễ nhất để tìm hiểu những gì lệnh một helper vỏ sẽ chạy là để gọi helper vỏ không có dấu ngoặc - điều này sẽ in ra các mã Javascript nó chạy:

> db.stats 
function (scale) { 
    return this.runCommand({dbstats:1, scale:scale}); 
} 

Đối với lý do tại sao một số lệnh có người giúp đỡ và những người khác làm không, nó phần lớn là một câu hỏi về sở thích, thời gian và tần suất sử dụng được cảm nhận bởi các tác giả lái xe. Bạn có thể chạy bất kỳ lệnh nào theo tên với Database.command, chỉ là một trình bao bọc tiện lợi xung quanh db.$cmd.find_one. Bạn có thể tìm thấy danh sách đầy đủ các lệnh tại List of Database Commands. Bạn cũng có thể submit a patch chống lại PyMongo để thêm phương thức trợ giúp cho các lệnh bạn thấy rằng bạn cần gọi thường xuyên nhưng chưa được PyMongo hỗ trợ.

+5

Được cảnh báo rằng dbstats chặn cơ sở dữ liệu của bạn trong khi nó chạy, vì vậy nó không phù hợp trong sản xuất. https://jira.mongodb.org/browse/SERVER-5714 – whit537

+0

+1 câu trả lời xuất sắc! –

+0

Nó không rõ ràng đây vẫn là một cuộc gọi chặn trong công cụ lưu trữ 'WiredTiger': http://stackoverflow.com/questions/36559408/is-db-stats-a-blocking-call-for-mongodb –

Các vấn đề liên quan