MongoDB $按日期查找最大文档

MongoDB $lookup with max document by date

我有这样的电影架构

{
  "_id" : string,
  "name": string
}

我有这样的评论架构

{
  "_id": string,
  "comment": string,
  "date": date,
  "movieId": string
}

我只想对最后一个 date 进行审核 $lookup。一部电影可能有很多评论,所以只是加入并按日期排序不是一种选择。我试过 pipeline 但不知道如何获取最后日期。

我想在 _id 电影和 movieId 评论中加入。输出应该是这样的

{
  "_id" : string,
  "name": string,
  "lastReview": [{
      "_id": string,
      "comment": string,
      "date": date,
      "movieId": string
  }]    
}

您可以执行以下操作。 这里我使用 Uncorrelated-sub-queries 来加入两个集合。我们可以在收集管道内进行聚合。 Sortlimit 的组合获得最新评论。

[
  {
    "$lookup": {
      "from": "review",
      "let": {
        mid: "$_id"
      },
      "pipeline": [
        {
          $sort: {
            date: -1
          }
        },
        {
          $limit: 1
        },
        {
          $match: {
            $expr: {
              $eq: [
                "$$mid",
                "$movieId"
              ]
            }
          }
        }
      ],
      "as": "review"
    }
  }
]

工作Mongo playground