MongoDB查询:查找多个第一个匹配的文档

MongoDB query: Find multiple first matching document

我有一个具有以下架构的集合:

{
  _id: ObjectId,
  company: ObjectId,
  endTime: date string
}

同一个 company 会有多个文档。 几个示例文档:

{_id: 1, company: companyA, endTime: Jan 1,2022}
{_id: 2, company: companyB, endTime: Feb 11,2022}
{_id: 3, company: companyA, endTime: Jan 3,2022}
{_id: 4, company: companyB, endTime: Jan 4,2022}
{_id: 5, company: companyA, endTime: Feb 21,2022}
{_id: 5, company: companyB, endTime: Jan 1,2022}

现在我想获取按结束时间 (desc) 排序的每个公司的第一个文档。我试过 aggregate 但没能完成。

以上文档的结果:

{_id: 5, company: companyA, endTime: Feb 21,2022}
{_id: 2, company: companyB, endTime: Feb 11,2022}

如有任何帮助,我们将不胜感激。

  1. $sort - 按 endTime DESC.
  2. 排序
  3. $group - 按 company 分组并将第一个文档 ($first) 作为 data 字段。
  4. $replaceWith - 将输入文档替换为 data
db.collection.aggregate([
  {
    $sort: {
      endTime: -1
    }
  },
  {
    $group: {
      _id: "$company",
      data: {
        $first: "$$ROOT"
      }
    }
  },
  {
    "$replaceWith": "$data"
  }
])

Sample Mongo Playground