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

如何从MongoDB文档提取指定字段并返回JSON格式API响应

提取MongoDB用户指定字段并返回JSON格式API响应

问题场景

现有MongoDB用户文档结构如下:

{
  "_id": {
    "$oid": "638df6dd4774e9573010b138"
  },
  "username": "abc",
  "email": "abc@xyz.com",
  "stats": {
    "ranking": "1",
    "match": "0.214"
  },
  "stats_extra": {
    "pre_ranking": "10",
    "pre_match": "0.290"
  }
}

需要实现一个API接口,仅提取每个用户的username和stats字段,并返回如下格式的JSON响应:

{"data": [ 
{"username":"abc", "stats":{"ranking": "1","match": "0.214"}} ,
{"username":"xyz", "stats":{"ranking": "10","match": "0.2104"}} ,
{"username":"ijk", "stats":{"ranking": "12","match": "0.2014"}}]
} 

目前能打印出目标字段,但无法组装成指定格式返回。

解决方案

方法1:手动构造目标字典

遍历查询结果时,逐个提取需要的字段构造字典,存入列表后返回:

@app.get("/Stats",  tags=["userstats"])
def get_stats():
    # 初始化空列表存储用户数据
    user_stats = []
    # 遍历所有用户文档
    for doc in app.Users.find():
        # 构造仅包含目标字段的字典
        user_item = {
            "username": doc["username"],
            "stats": doc["stats"]
        }
        user_stats.append(user_item)
    # 按要求格式返回
    return {"data": user_stats}

方法2:使用MongoDB投影优化查询

直接在查询时指定只返回username和stats字段(排除默认返回的_id),减少数据传输量:

@app.get("/Stats",  tags=["userstats"])
def get_stats():
    # 投影参数:1表示保留字段,0表示排除字段
    projection = {"username": 1, "stats": 1, "_id": 0}
    # 查询并直接转换为列表
    user_stats = list(app.Users.find({}, projection))
    # 返回指定格式
    return {"data": user_stats}

两种方法都能得到你需要的JSON响应格式,推荐用方法2,因为它在数据库层面就过滤了不需要的字段,性能更优。

内容的提问来源于stack exchange,提问作者M_Arad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:01:44