[英]Embedded document corrresponding to the maximum value in pymongo
我的集合中的文档具有以下架构。 每个文件对应一个名称列出的所有提交。
- "_id": ObjectId
- "name": str
- "is_team": bool
- "submissions": List
- time: datetime
- score: float
例子:
{"name": "Intrinsic Nubs",
"is_team": true,
"submissions": [
{
"score": 61.77466359705439,
"time": {
"$date": {
"$numberLong": "1656009267652"
}
}
},
{
"score": 81.77466359705439,
"time": {
"$date": {
"$numberLong": "1656009267680"
}
}
}]}
我需要收集所有那些is_team为True的文档,并进一步获取与最大分数对应的名称、最大分数和时间。
例子:
[{"name": "Intrinsic Nubs", "MaxScore": 81.77466359705439, "time":{ "$date": {"$numberLong": "1656009267680"}}}]
询问
is_team=true
保存文档$project
,而且我保留了所有看到的变化aggregate(
[{"$match": {"is_team": {"$eq": true}}},
{"$set":
{"name": "$name",
"max-submision":
{"$reduce":
{"input": "$submissions",
"initialValue": {"score": 0},
"in":
{"$cond":
[{"$gt": ["$$this.score", "$$value.score"]}, "$$this",
"$$value"]}}}}}])
这是产生所需输出的另一种方法。
db.collection.aggregate([
{ // limit docs
"$match": {"is_team": true}
},
{ // set MaxScore
"$set": {"MaxScore": {"$max": "$submissions.score"}}
},
{ "$project": {
"_id": 0,
"name": 1,
"MaxScore": 1,
"time": {
// get time at MaxScore
"$arrayElemAt": [
"$submissions.time",
{"$indexOfArray": ["$submissions.score", "$MaxScore"]}
]
}
}
}
])
在mongoplayground.net上试试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.