2013-02-06 4 views
3

Я переключил свой скрипт на python с помощью pymongo на использование mongoengine. Раньше у меня был этот вызов:MongoEngine & serverStatus

client_count = db.command("serverStatus")["connections"]['current'] - 1

, но я хочу, чтобы получить число текущих соединений с использованием оболочки mongoengine вместо этого. Я просмотрел server-status и mongoengine docs и не смог найти эквивалентный вызов для вытягивания переменных сервера.

Я хочу перейти на mongoengine, потому что мы используем его функции ODM, и мы хотели бы сократить избыточность.

Любые указатели на это? Каков правильный синтаксис, если вообще? Благодарю.

В то же время мы просто собираемся использовать pymongo для получения правильных данных, а при использовании mongoengine для всего остального.

ответ

6

Не существует эквивалента Mongoengine, поэтому вы должны называть это вручную. Когда мы завершаем pymongo, вы можете выполнить вызов, получив базу данных из регистра подключения. Самый простой способ сделать это - использовать класс документа, например:

db = Document._get_db() 
client_count = db.command("serverStatus")["connections"]['current'] - 1 
+0

Оба Ross & acm дали очень полезные ответы с точной формулировкой - спасибо вам всем! Фрагмент кода имеет смысл и проливает свет на внутреннюю работу. – Xeus

1

Предостережение: Я не знаю ни одного из этих API хорошо.

Однако, если вы посмотрите на зависимости mongoengine, вы увидите, что это зависит от pymongo, поскольку оно фактически реализовано с точки зрения pymongo.

Теперь взгляните на реализацию mongoengines логики подключения: https://github.com/MongoEngine/mongoengine/blob/master/mongoengine/connection.py#L113: объекты соединения, которые он возвращает, фактически являются соединениями pymongo. Таким образом, в принципе, вы должны иметь возможность делать вызовы pymongo по возвращенному соединению. Таким образом, вы могли бы продолжать использовать вышеупомянутый вызов. Конечно, вы нарушаете инкапсуляцию mongoengine в этот момент, поскольку mongoengine может изменить свой внутренний тип реализации для соединений.

Однако, просматривая их документацию, я не вижу другого способа доступа к этому аспекту базы данных, поэтому, возможно, это самый простой способ продвижения вперед.

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