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'
            }
        }
    }
]

您可以在聚合管道中执行以下操作:

  1. $group 通过 yearweek_number;将 _id 推入数组以供将来查找
  2. $sort 通过 year: -1week_number: -1
  3. $limit 得到第一个分组,即最大 yearweek_number
  4. 的分组
  5. $lookup原始文档使用步骤1中先前存储的_id数组
  6. $replaceRoot 取回文件

这里是Mongo playground供您参考。