bson.json_util
предоставляет функции для преобразования в канонический или расслабленный формат JSON. Однако оба они придерживаются одного и того же представления ObjectId:
from PyMongo import MongoClient
from bson.objectid import ObjectId
from bson import json_util
from bson.json_util import RELAXED_JSON_OPTIONS
from bson.json_util import CANONICAL_JSON_OPTIONS, DEFAULT_JSON_OPTIONS
db = MongoClient(URL)['DB_NAME']
mongo_query_result = db.collection.find_one({'_id': ObjectId('ID')},
{'_id': 1})
# returns {'_id': ObjectId('ID')}
print(json_util.dumps(mongo_query_result, json_options=RELAXED_JSON_OPTIONS))
print(json_util.dumps(mongo_query_result, json_options=CANONICAL_JSON_OPTIONS))
print(json_util.dumps(mongo_query_result, json_options=DEFAULT_JSON_OPTIONS))
# Results
{"_id": {"$oid": "ID"}}
{"_id": {"$oid": "ID"}}
{"_id": {"$oid": "ID"}}
# Desired Output
{"_id": "ID"}
Проблема в том, что он не соответствует результатам, которые я получаю в prod env. Я использую PyMongo
только для построения тестовых случаев, фактический формат prod:
{'_id': "ID", ..etc}
Я немного посмотрел в документации более здесь , и вот результаты:
- И CANONICAL_JSON_OPTIONS, и RELAXED_JSON_OPTIONS придерживаются проблемного представления, спецификации здесь .
- Кажется, я не могу перезаписать его, потому что
uuid_representation=PYTHON_LEGACY
, а я не могунайти способ обойти это.
Есть ли что-то, что мне не хватает для преобразования PyMongo
результата запроса в:
{'_id' : 'ID', ..}
# not
{'_id' : {'$oid' : 'ID'}, ..}
Я бы не хотел расширять свой код только для обработкидругой формат тестов.