将 json 模块与自定义处理程序一起使用

如果你只需要将 mongo 结果序列化为 json,则可以使用 json 模块,前提是你定义了自定义处理程序来处理非可序列化字段类型。一个优点是你可以全面了解特定字段的编码方式,例如日期时间表示。

这是一个处理程序,它使用 iso 表示法编码日期,id 作为十六进制字符串:

import pymongo
import json 
import datetime
import bson.objectid

def my_handler(x):
    if isinstance(x, datetime.datetime):
        return x.isoformat()
    elif isinstance(x, bson.objectid.ObjectId):
        return str(x)
    else:
        raise TypeError(x)

db = pymongo.MongoClient().samples
record = db.movies.find_one()
# {u'_id': ObjectId('5692a15524de1e0ce2dfcfa3'), u'title': u'Toy Story 4',
#   u'released': datetime.datetime(2010, 6, 18, 4, 0),}

json_record = json.dumps(record, default=my_handler)
# '{"_id": "5692a15524de1e0ce2dfcfa3", "title": "Toy Story 4", 
#    "released": "2010-06-18T04:00:00"}'