我在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": ...},
...
]
答案 0 :(得分:0)
你的问题是由于pymongo没有返回直接的JSON字符串。可在此处找到如何处理此问题的示例 -
How do I turn MongoDB query into a JSON?
应该注意,除非另有配置,否则API Gateway期望返回JSON。 https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/