使用pymongo操作MongoDB时聚合查询后如何保留JSON原有键名
问题解决方法
你当前返回的结果无原始键名,是因为代码中将查询到的各字段值手动拼接为数组存入结果列表,数组结构本身不携带键名信息,序列化后就只有字段值返回。
修改后的完整代码
@app.route("/api/v1.0/players/top-assister", methods=["GET"]) def top_assister(): pipeline = [ { "$match" : { "assists" : {"$gte" : 12} } }, # 新增_id:0 关闭MongoDB默认返回的_id字段 { "$project" : {"_id": 0, "assists" : 1, "player" : 1, "team":1}} ] top_assister = [] for player in players.aggregate(pipeline): # 直接将带键名的字典加入结果列表即可 top_assister.append(player) return make_response(jsonify(top_assister), 200)
修改点说明
- 聚合管道的
$project阶段新增"_id": 0配置,过滤掉MongoDB默认返回的文档内置ID字段,只保留你需要的三个业务字段 - 移除了遍历过程中无意义的单独字段取值、转字符串语句(你之前写的
player["assists"]等语句既没有赋值也没有参与后续逻辑,属于无效代码) - 不再手动拼接字段值数组,直接将MongoDB返回的带键名字典存入结果列表,序列化后就会保留原始的
player、team、assists键名
内容的提问来源于stack exchange,提问作者Moonket
相关产品推荐
相关产品推荐

