使用$Match在最近N年之間篩選MongoDB數據
P粉211273535
P粉211273535 2024-01-29 15:18:25
0
1
488

我是 MongoDB 新手。我想使用匹配來僅獲取過去 2 年之間的記錄。有沒有一種方法可以在不進行硬編碼的情況下做到這一點?

例如,今年是 2023 年。但是我的收藏記錄的最新年份是 2021 年。我想要取得我的收藏最近 2 年的記錄,而不是當前年份。因此範圍將是 2019-2021 年,而不是2021-2023 年。

有沒有一種方法可以做到這一點,而無需將年份硬編碼為字串?

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

目前我有這個,硬編碼的

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

P粉211273535
P粉211273535

全部回覆(1)
P粉146080556

可以使用$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 遊樂場

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!