Gunakan $Match untuk menapis data MongoDB antara N tahun lalu
P粉211273535
P粉211273535 2024-01-29 15:18:25
0
1
485

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粉211273535
P粉211273535

membalas semua(1)
P粉146080556

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!