【发布时间】:2021-06-11 08:30:30
【问题描述】:
我有一个包含这种格式的文档的集合:
{"_id":{"date_played":{"$date":"1998-03-28T00:00:00.000Z"},"course_played":4,"player_id":11},"score":[5,6,4,4,5,9,6,6,5,7,6,6,5,7,5,3,9,4],"handicap":30,"cash_won":0,"sort_order":6,"gross_score":102,"gross_sfpts":34,"skins_group":1,"score_differential":28,"pcc_adjustment":0,"player_name":"Dave"}
通过 _id.player_id 我试图返回去年(_id.date_played)内记录的“score_differential”的最小值,如果去年没有记录,那么我想要玩家的最小“score_differential”集合。 我尝试了很多组合,但这是我得到的最接近的组合:-
它返回正确的值,但问题是如果在一年内找到日期,我会返回两条记录,一条带有 _id: false 的记录在集合中最低,一条带有 _id: true 的记录在一年中最低。我的问题是我只想要一条记录而不是两条。非常感谢任何帮助,因为我在这方面花了几天时间,对于来自 mysql 的 mongodb 来说相对较新。
{
'$match': {
'_id.player_id': 11
}
}, {
'$group': {
'_id': {
'$min': [
{
'$gt': [
'$_id.date_played', {
'$dateFromParts': {
'year': {
'$subtract': [
{
'$year': new Date()
}, 1
]
},
'month': {
'$month': new Date()
},
'day': {
'$dayOfMonth': new Date()
}
}
}
]
}
]
},
'minWHI': {
'$min': '$score_differential'
}
}
}
] ```
【问题讨论】:
标签: mongodb