首頁  >  問答  >  主體

使用$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 天前494

全部回覆(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
  • 取消回覆