將 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"}'