PyMongo查询is_team为True文档 提取嵌入数组最高分对应记录
MongoDB聚合查询实现方案
直接用聚合管道就能完成需求,不需要额外代码处理,具体逻辑如下:
- 第一阶段用
$match过滤出所有is_team值为true的团队文档 - 第二阶段用
$project定制返回字段:- 保留原文档的
name字段 - 用
$max运算符直接计算submissions数组里的最高score,命名为MaxScore - 先过滤出score等于最高值的提交项,取第一项的time字段,就是最高分对应的提交时间
- 保留原文档的
可直接执行的聚合代码
把代码里的你的集合名替换成实际的集合名称即可:
db.你的集合名.aggregate([ { $match: { is_team: true } }, { $project: { _id: 0, name: 1, MaxScore: { $max: "$submissions.score" }, time: { $let: { vars: { max_score_item: { $arrayElemAt: [ { $filter: { input: "$submissions", cond: { $eq: ["$$this.score", { $max: "$submissions.score" }] } } }, 0 ] } }, in: "$$max_score_item.time" } } } } ])
补充说明
如果同一个主体存在多条相同最高分的提交记录,上述写法默认返回匹配到的第一条最高分对应的时间,返回结构完全匹配给出的预期示例。
内容的提问来源于stack exchange,提问作者Mystic Mickey
相关产品推荐
相关产品推荐

