Verwenden Sie $Match, um MongoDB-Daten zwischen den letzten N Jahren zu filtern
P粉211273535
P粉211273535 2024-01-29 15:18:25
0
1
539

Ich bin neu bei MongoDB. Ich möchte match verwenden, um nur Datensätze zwischen den letzten 2 Jahren abzurufen. Gibt es eine Möglichkeit, dies ohne harte Codierung zu tun?

Zum Beispiel ist das Jahr 2023. Aber das letzte Jahr, das in meiner Sammlung verzeichnet ist, ist 2021. Ich möchte Meine SammlungDatensätze der letzten 2 Jahre erhalten, nicht des aktuellen Jahres. Der Bereich wird also 2019–2021 sein, statt 2021–2023.

Gibt es eine Möglichkeit, dies zu tun, ohne das Jahr fest in eine Zeichenfolge zu codieren?

Ich möchte diese Informationen erhalten, damit ich sie in der nächsten Phase verwenden kann

Derzeit habe ich das, fest codiert

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

P粉211273535
P粉211273535

Antworte allen(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 游乐场

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage