0

我在用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": ...}, 
    ... 
] 

回答