MongoDB 获取集合中具有最高价值的所有文档
MongoDB get all documents with highest value in collection
上下文:
我有一个 MongoDB 满是这样的文档:
[
{
"_id": "615dc97907f597330c510279",
"code": "SDFSDFSDF",
"location": "ABC1",
"week_number": 39,
"year": 2020,
"region": "NA"
},
....
{
"_id": "615dc97907f597330c51027a",
"code": "SDFSGSGR",
"location": "ABC1",
"week_number": 42,
"year": 2021,
"region": "EU"
},
....
{
"_id": "615dc97607f597330c50ff50",
"code": "GGSFHSFS",
"location": "DEF2",
"week_number": 42,
"year": 2021,
"region": "EU",
"audit_result": {
"issues_found": true,
"comment": "comment."
}
}
]
问题
我正在尝试编写一个聚合,它应该 return 所有具有最高“week_number”和最高“年份”的对象。所以对于上面的例子,我想 return _id "615dc97907f597330c51027a" 和 "615dc97607f597330c50ff50" 的完整文档。
我尝试了多种方法。就像先排序然后分组但没有成功。
目前我有这样的东西,这看起来合乎逻辑,但它 return 不仅是周和年最高的文件
[
{
'$match': {
'$expr': {
'$max': '$week_number',
'$max': '$year'
}
}
}
]
您可以在聚合管道中执行以下操作:
$group
通过 year
和 week_number
;将 _id
推入数组以供将来查找
$sort
通过 year: -1
和 week_number: -1
$limit
得到第一个分组,即最大 year
和 week_number
的分组
$lookup
原始文档使用步骤1中先前存储的_id
数组
$replaceRoot
取回文件
这里是Mongo playground供您参考。
上下文:
我有一个 MongoDB 满是这样的文档:
[
{
"_id": "615dc97907f597330c510279",
"code": "SDFSDFSDF",
"location": "ABC1",
"week_number": 39,
"year": 2020,
"region": "NA"
},
....
{
"_id": "615dc97907f597330c51027a",
"code": "SDFSGSGR",
"location": "ABC1",
"week_number": 42,
"year": 2021,
"region": "EU"
},
....
{
"_id": "615dc97607f597330c50ff50",
"code": "GGSFHSFS",
"location": "DEF2",
"week_number": 42,
"year": 2021,
"region": "EU",
"audit_result": {
"issues_found": true,
"comment": "comment."
}
}
]
问题
我正在尝试编写一个聚合,它应该 return 所有具有最高“week_number”和最高“年份”的对象。所以对于上面的例子,我想 return _id "615dc97907f597330c51027a" 和 "615dc97607f597330c50ff50" 的完整文档。
我尝试了多种方法。就像先排序然后分组但没有成功。 目前我有这样的东西,这看起来合乎逻辑,但它 return 不仅是周和年最高的文件
[
{
'$match': {
'$expr': {
'$max': '$week_number',
'$max': '$year'
}
}
}
]
您可以在聚合管道中执行以下操作:
$group
通过year
和week_number
;将_id
推入数组以供将来查找$sort
通过year: -1
和week_number: -1
$limit
得到第一个分组,即最大year
和week_number
的分组
$lookup
原始文档使用步骤1中先前存储的_id
数组$replaceRoot
取回文件
这里是Mongo playground供您参考。