2012-01-04 2 views
5

Я пытаюсь получить результаты команды db.stats() mongo shell в моем коде python (для целей мониторинга).MongoDB: как получить db.stats() из API

Но, в отличие от, например, serverStatus, я не могу сделать db.command('stats'). Я не смог найти эквивалент API в документах mongodb. Я также пробовал варианты с db.$cmd, но все это не сработало.

Так,

Небольшой вопрос: как я могу получить результаты db.stats() (количество соединений/объектов, размер данных & индексов, и т.д.) в моем питона коде?

Большой вопрос: может ли кто-нибудь объяснить, почему некоторые команды оболочки легко доступны из API, а другие нет? Это очень раздражает: некоторые инструменты, связанные с администратором, доступны через db.$cmd.sys, некоторые через db.command, некоторые через ...? Есть ли какой-то стандарт или объяснение этой ситуации?

PS: MongoDB 2.0.2, 2.1.0 PyMongo, питон 2,7

ответ

10

команда хелперов В JavaScript командной оболочки stats фактически вызывает команду с именем dbstats, который вы можете запустить из PyMongo с помощью Database.command method. Самый простой способ узнать, какую команду помощник оболочка будет работать, чтобы вызвать помощник оболочки без скобок - это распечатать код Javascript он работает:

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

А почему некоторые команды имеют помощник, а другие Нет, это во многом вопрос предпочтения, времени и воспринимаемой частоты использования авторами драйверов. Вы можете запускать любую команду по имени с помощью Database.command, которая представляет собой удобную обертку вокруг db.$cmd.find_one. Полный список команд можно найти по адресу List of Database Commands. Вы также можете использовать submit a patch против PyMongo, чтобы добавить вспомогательный метод для команд, которые вы обнаружите, что вам нужно часто вызывать, но пока еще не поддерживаемых PyMongo.

+5

Будьте предупреждены, что dbstats блокирует вашу базу данных во время ее запуска, поэтому она не подходит для производства. https://jira.mongodb.org/browse/SERVER-5714 – whit537

+0

+1 блестящий ответ! –

+0

Непонятно, что это все еще блокирующий вызов в модуле хранения WiredTiger: http://stackoverflow.com/questions/36559408/is-db-stats-a-blocking-call-for-mongodb –

Смежные вопросы