suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Verwenden Sie $Match, um MongoDB-Daten zwischen den letzten N Jahren zu filtern

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粉211273535P粉211273535329 Tage vor543

Antworte allen(1)Ich werde antworten

  • 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 游乐场

    Antwort
    0
  • StornierenAntwort