首页 > 解决方案 > MongoDB watch() 返回 JSON

问题描述

我正在开发从 MongoDB 到 AWS S3 的管道。我正在使用 Mongo watch() 方法从日志中流式传输事件(使用 pymongo)。

问题是返回的事件无法转换为 JSON,因为它们在值中包含 Mongo 对象,例如:

{'_id': ObjectId('5f0c6cf7200000aacdsertee4ac')}

由于该值不在引号中,因此无法将字符串转换为 JSON。

有什么方法可以让 watch() 方法返回字符串?或另一种方法来解决这个问题?

标签: mongodbpymongo

解决方案


这是我得到的解决方案:

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

with db.watch() as stream:
    for event in stream:
        data = json.dumps(event, default=bson_ser)

推荐阅读