如何基于Flask URL变量通过PyMongo检索MongoDB中的记录
问题解决
错误原因
- pymongo的
find()方法要求第一个查询过滤参数必须是Python字典/SON对象,你当前代码中使用jsonify()处理过滤条件是错误的:jsonify()是Flask提供的用于生成HTTP JSON响应的方法,返回的是响应对象而非字典,不符合pymongo的参数要求 - 你用字符串拼接的方式构造查询条件的逻辑错误,MongoDB的查询条件直接用Python字典声明即可,不需要手动拼接成字符串
修正后的代码
@app.route("/infrastructure/<infrastructure_type>") def get_infrastructure(infrastructure_type): # 直接构造Python字典作为查询过滤器 query_filter = {"properties.type.primary": infrastructure_type} infrastructure = db.infrastructure.find(query_filter, projection = {"_id": False}) return jsonify([resource for resource in infrastructure])
逻辑说明
- 直接按照MongoDB嵌套字段的查询规则,将过滤条件写为键为
properties.type.primary、值为URL传入参数的Python字典,直接传给find()方法即可 - 不需要在查询阶段调用
jsonify,仅在最后返回响应的时候用jsonify处理查询结果即可
内容的提问来源于stack exchange,提问作者bkleeman
相关产品推荐
相关产品推荐

