You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建GET API端点按名称查询MongoDB中的商家文档?

问题描述

我在MongoDB中存储了商家数据,结构如下:

[ 
  {  
    "_id": "1",
    "name": "Apple",
    "reviews": [
      {
        "_id": "1",
        "comment": "Good",
      }
    ]
  },
  {  
    "_id": "2",
    "name": "Microsoft",
    "reviews": [
      {
        "_id": "1",
        "comment": "Great",
      }
    ]     
  } 
]

现有一个通过商家_id获取信息的GET API,代码如下:

@app.route("/api/v1.0/businesses/<string:id>", methods=["GET"])
def show_one_business(id): 
    business = businesses.find_one({'_id':ObjectId(id)})
    if business is not None:
        business['_id'] = str(business['_id'])
        for review in business['reviews']:
            review['_id'] = str(review['_id'])
        return make_response( jsonify ( [ business ] ), 200 )
    else:
        return make_response( jsonify( {"error" : "Invalid business ID"} ), 404 ) 

我想创建一个通过商家名称(如Apple)获取对应信息的API端点,尝试将原接口中的_id改为name但未成功,该如何实现?

解决方案

直接修改原接口会导致路由冲突,且name是字符串类型无需转ObjectId,正确的做法是新增独立路由:

  • 定义新路由:设置和原接口不同的路径,比如/api/v1.0/businesses/name/<string:name>,避免路径匹配冲突。
  • 调整查询逻辑:查询条件直接用name字段匹配字符串,不需要使用ObjectId转换。
  • 复用数据处理逻辑:和原接口一致,将MongoDB返回的ObjectId类型转为字符串,确保JSON序列化正常。
  • 错误处理:未找到商家时返回404错误,提示信息对应修改为“Invalid business name”。

完整代码示例:

@app.route("/api/v1.0/businesses/name/<string:name>", methods=["GET"])
def show_business_by_name(name): 
    # 直接用name字符串匹配,无需ObjectId转换
    business = businesses.find_one({'name': name})
    if business is not None:
        business['_id'] = str(business['_id'])
        for review in business['reviews']:
            review['_id'] = str(review['_id'])
        return make_response(jsonify([business]), 200)
    else:
        return make_response(jsonify({"error": "Invalid business name"}), 404)

补充说明

  • 如果需要不区分大小写的名称匹配,可以使用MongoDB正则表达式查询:
    business = businesses.find_one({'name': {'$regex': f'^{name}$', '$options': 'i'}})
    
  • 若存在多个同名商家,find_one只会返回第一个匹配结果,如需返回全部同名商家,改用find()并转为列表处理。

内容的提问来源于stack exchange,提问作者gadget-man615

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:30:38