【问题标题】:Return MongoDB collection with AWS Lambda and API Gateway使用 AWS Lambda 和 API Gateway 返回 MongoDB 集合
【发布时间】: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


【解决方案1】:

您的问题是由于 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/

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2017-09-07
    • 2018-11-28
    • 1970-01-01
    • 2017-02-08
    • 2018-12-25
    相关资源
    最近更新 更多