我在用Python編寫的AWS Lambda中有一個函數。使用AWS Lambda和API網關返回MongoDB集合
我想從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": ...},
...
]