首页  >  问答  >  正文

使用$Match在最近N年之间筛选MongoDB数据

我是 MongoDB 新手。我想使用匹配来仅获取过去 2 年之间的记录。有没有一种方法可以在不进行硬编码的情况下做到这一点?

例如,今年是 2023 年。但是我的收藏记录的最新年份是 2021 年。我想要获取我的收藏最近 2 年的记录,而不是当前年份。因此范围将是 2019-2021 年,而不是2021-2023 年。

有没有一种方法可以做到这一点,而无需将年份硬编码为字符串?

我想获取此信息,以便在下一阶段使用它

目前我有这个,硬编码的

{
        $match: {
          fechaOrden: {
            $gte: ISODate("2018-01-01"),
            $lt: ISODate("2020-02-01"),
          }, 
        },
      },
    ] ```

P粉211273535P粉211273535264 天前496

全部回复(1)我来回复

  • P粉146080556

    P粉1460805562024-01-30 13:18:01

    可以使用$setWindowFields来抓取文档近2年的记录。然后,使用 $sort + $limit 查找整个集合中最新的记录并返回关联的最近 2 年的记录。

    db.collection.aggregate([
      // compute latest records in 2 years
      {
        $setWindowFields: {
          sortBy: {
            dt: 1
          },
          output: {
            recentRecords: {
              $push: "$$ROOT",
              window: {
                range: [
                  -2,
                  0
                ],
                unit: "year"
              }
            }
          }
        }
      },
      // find latest records in whole collection
      {
        "$sort": {
          dt: -1
        }
      },
      {
        $limit: 1
      },
      // cosmetics
      {
        "$unwind": "$recentRecords"
      },
      {
        "$replaceRoot": {
          "newRoot": "$recentRecords"
        }
      }
    ])
    

    Mongo 游乐场

    回复
    0
  • 取消回复