mongoDB聚合方法查找过去20年的电影

问题描述 投票:0回答:1

我正在尝试获取文档中最近 20 年的所有电影。我正在尝试这样但不起作用。这是我第一次使用 mongoDB,所以我有点迷失,可能从一开始就错了。

` var query1 = { "_id": null, "maxYear": { $max: "$year" } } var fase1 = { $group: query1 }

var query2 = { "_id": null, "minYear": { $subtract: [ "$maxYear" , 20 ] } } var fase2 = { $project: query2 }

var query3 = { "year": { $gte: "$minYear" } } var fase3 = { $match: query3 }

var etapas = [ fase1, fase2, fase3 ] db.movies.aggregate(etapas)`

这是我的数据示例:

/* 1 createdAt:4/12/2023 23:56:33*/ { "_id" : ObjectId("656e59214247fdc6cb90136d"), "title" : "Caught", "year" : 1900, "cast" : [ "Undefined" ], "genres" : [ "Undefined" ] }, 
期待博士近20年的电影。

mongodb group-by match aggregate
1个回答
0
投票

如果我正确理解你的问题,你正在尝试获取 2003 年到 2023 年,也就是到现在为止最近 20 年的

year
的文件。

在过滤器查询中,您应该获取当前年份,并用

year
字段减去。过滤结果小于或等于 20 的文档。

db.movies.aggregate([
  {
    $match: {
      $expr: {
        $lte: [
          {
            $subtract: [
              {
                $year: "$$NOW"
              },
              "$year"
            ]
          },
          20
        ]
      }
    }
  }
])

演示@Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.