Дамп записи пимонго, довольно напечатанный в текст, как оболочка монго - PullRequest
0 голосов
/ 27 апреля 2019

Я знаю, что могу печатать монго-записи примерно так:

class CustomJSONEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, ObjectId):
            return repr(obj)
        else:
            return super(CustomJSONEncoder, self).default(obj)

print(json.dumps(obj, cls=CustomJSONEncoder, indent=4, sort_keys=True))

Однако я бы хотел, чтобы результат выглядел так:

"_id" : ObjectId("93768784abd8849385763eab"),

Но вместо этого это выглядит так:

"_id" : "ObjectId('93768784abd8849385763eab')",

И если я изменю repr на str, это будет выглядеть так:

"_id" : "93768784abd8849385763eab",

Как я могу получить такой же вывод или максимально близко к принтеру оболочки Mongo, используя драйвер pymongo? Примечание: это только для целей отображения, мне не нужно анализировать вывод обратно во что-либо.

1 Ответ

0 голосов
/ 27 апреля 2019

Рассмотрите возможность использования модуля pprint из стандартной библиотеки:

>>> import pprint
>>> import bson
>>> o = bson.ObjectId()
>>> pprint.pprint({'_id': o})
{'_id': ObjectId('5cc37cfd8b4d4d42dc2cb511')}

pformat может сохранять результаты симпатичного форматирования для замены ' в " насделать результат похожим на Mongo Shell:

>>> formatted = pprint.pformat({'_id': o})
>>> print(formatted.replace("'", '"'))
{"_id": ObjectId("5cc37cfd8b4d4d42dc2cb511")}
...