Maison  >  Questions et réponses  >  le corps du texte

Utilisez $Match pour filtrer les données MongoDB entre les N dernières années

Je suis nouveau sur MongoDB. Je souhaite utiliser match pour obtenir uniquement les enregistrements des 2 dernières années. Existe-t-il un moyen de le faire sans coder en dur ?

Par exemple, nous sommes en 2023. Mais la dernière année enregistrée dans ma collection est 2021. Je souhaite obtenir les enregistrements de Ma Collection des 2 dernières années, pas de l'année en cours. La fourchette sera donc 2019-2021, au lieu de 2021-2023.

Existe-t-il un moyen de le faire sans coder en dur l'année dans une chaîne ?

Je souhaite obtenir ces informations afin de pouvoir les utiliser lors de la prochaine étape

Actuellement, j'ai ceci, codé en dur

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

P粉211273535P粉211273535264 Il y a quelques jours495

répondre à tous(1)je répondrai

  • P粉146080556

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

    Vous pouvez utiliser $setWindowFields来抓取文档近2年的记录。然后,使用 $sort + $limit pour rechercher le dernier enregistrement de toute la collection et renvoyer les enregistrements associés des 2 dernières années.

    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"
        }
      }
    ])
    

    Aire de jeux Mongo

    répondre
    0
  • Annulerrépondre