使用 python-bsonjs

python-bsonjs 不依赖于 PyMongo,并且可以提供比 json_util 更好的性能提升:

bsonjs 大致 10-15x 比 PyMongo 的在解码 BSON 到 JSON 和编码 JSON 来 BSON json_util 更快。

注意:

  • 为了有效地使用 bsonjs,建议直接使用 RawBSONDocument
  • 日期使用 LEGACY 表示法编码,即 {"$date": <dateAsMilliseconds>}。目前没有可以改变的选项。

安装

pip install python-bsonjs

用法

要充分利用 bsonjs,请将数据库配置为使用 RawBSONDocument 类。然后,使用 dumps 将 bson 原始字节转换为 json 和 loads,将 json 转换为 bson 原始字节:

import pymongo
import bsonjs
from pymongo import MongoClient
from bson.raw_bson import RawBSONDocument

# configure mongo to use the RawBSONDocument representation
db = pymongo.MongoClient(document_class=RawBSONDocument).samples
# convert json to a bson record
json_record = '{"_id": "some id", "title": "Awesome Movie"}' 
raw_bson = bsonjs.loads(json_record)
bson_record = RawBSONDocument(raw_bson)
# insert the record
result = db.movies.insert_one(bson_record)
print(result.acknowledged)

# find some record
bson_record2 = db.movies.find_one()
# convert the record to json
json_record2 = bsonjs.dumps(bson_record2.raw)
print(json_record2)