Rumah  >  Soal Jawab  >  teks badan

Gunakan $Match untuk menapis data MongoDB antara N tahun lalu

Saya baru menggunakan MongoDB. Saya mahu menggunakan match untuk mendapatkan hanya rekod antara 2 tahun lepas. Adakah terdapat cara untuk melakukan ini tanpa pengekodan keras?

Sebagai contoh, tahun ialah 2023. Tetapi tahun terkini yang dicatatkan dalam koleksi saya ialah 2021. Saya ingin mendapatkan My Collectionrekod dari 2 tahun lepas, bukan tahun semasa. Jadi julatnya ialah 2019-2021, bukannya 2021-2023.

Adakah terdapat cara untuk melakukan ini tanpa pengekodan keras tahun menjadi rentetan?

Saya ingin mendapatkan maklumat ini supaya saya boleh menggunakannya di peringkat seterusnya

Pada masa ini saya mempunyai ini, hardcoded

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

P粉211273535P粉211273535264 hari yang lalu490

membalas semua(1)saya akan balas

  • P粉146080556

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

    Anda boleh menggunakan $setWindowFields来抓取文档近2年的记录。然后,使用 $sort + $limit untuk mencari rekod terkini dalam keseluruhan koleksi dan mengembalikan rekod yang berkaitan dari 2 tahun lepas.

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

    Taman Permainan Mongo

    balas
    0
  • Batalbalas