【发布时间】:2018-02-14 02:25:10
【问题描述】:
我在 AWS Lambda 中有一个用 Python 编写的函数。
我正在尝试使用 pymongo 从 MongoDB 中的集合中提取文档。
我认为这很简单,但我似乎遇到了问题(可能是因为 ObjectID 类型)。
我只是想这样做
from pymongo import MongoClient
def lambda_handler(event, context):
client = MongoClient(MONGODB_URI)
db = client[DB_NAME]
return db.users.find({})
但我得到了错误
{errorMessage= is not JSON serializable, errorType=TypeError, stackTrace=[["\/var\/lang\/lib\/python3.6\/json\/__init__.py",238,"dumps","**kw).encode(obj)"],["\/var\/lang\/lib\/python3.6\/json\/encoder.py",199,"encode","chunks = self.iterencode(o, _one_shot=True)"],["\/var\/lang\/lib\/python3.6\/json\/encoder.py",257,"iterencode","return _iterencode(o, 0)"],["\/var\/runtime\/awslambda\/bootstrap.py",110,"decimal_serializer","raise TypeError(repr(o) + \" is not JSON serializable\")"]]}
如果我使用return bson.json_util.dumps(db.users.find({})),它确实有效,但为什么需要它?
据我了解,lambda函数总是返回json,所以我不明白为什么我必须使用bson.json_util。
另外,当我使用这个函数时,我没有得到正常的 ObjectID 类型,而是得到了
[
{"_id": {"$oid": "59aed327f25c0f0ca8f94ae1"}, "name": ...},
...
]
虽然我想要类似的东西
[
{"_id": "59aed327f25c0f0ca8f94ae1", "name": ...},
...
]
【问题讨论】:
-
您能否分享您已连接到 MongoDB 并使用 AWS Lambda 获取或发布数据的脚本?我一直遇到问题,我无法完成任何事情。
标签: python mongodb amazon-web-services aws-lambda aws-api-gateway