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只是用来构建测试用例,实际的产品格式是
{'_id': "ID", ..etc}
我在这里查看了一些文档,以下是调查结果:
CANONICAL_JSON_OPTIONS 和 RELAXED_JSON_OPTIONS 都坚持有问题的表示,规范在这里。
我似乎无法覆盖它,因为uuid_representation=PYTHON_LEGACY我似乎无法找到解决方法。
我是否缺少将PyMongo查询结果转换为:
{'_id' : 'ID', ..}
# not
{'_id' : {'$oid' : 'ID'}, ..}
我不想扩展我的代码只是为了处理不同格式的测试用例。
富国沪深
慕沐林林
相关分类