Bagikan melalui


$regex (kueri evaluasi)

BERLAKU UNTUK: MongoDB vCore

Operator $regex menyediakan kemampuan ekspresi reguler untuk pencocokan pola dalam kueri. Ini memungkinkan Anda mencari dokumen di mana bidang cocok dengan pola ekspresi reguler tertentu. Operator ini berguna untuk pencarian string yang fleksibel, validasi pola, dan operasi pemfilteran teks yang kompleks.

Sintaksis

Sintaks untuk $objectToArray operator adalah sebagai berikut:

{
  <field>: { $regex: <pattern>, $options: <options> }
}

Atau bentuk yang lebih pendek:

{
  <field>: { $regex: /<pattern>/<options> }
}

Parameter-parameternya

Deskripsi
<field> Bidang untuk dicari. Harus berisi nilai string.
<pattern> Pola ekspresi reguler untuk dicocokkan.
<options> Fakultatif. Opsi ekspresi reguler seperti pencocokan tidak peka huruf besar/kecil. Opsi umum termasuk 'i' (tidak peka huruf besar/kecil), 'm' (multibaris), 's' (titik semua), dan 'x' (diperluas).

Contoh

Contoh 1: Temukan penyimpanan berdasarkan pola nama

Contohnya menemukan semua toko yang berisi "Konsultan" dalam namanya (tidak peka huruf besar/kecil).

db.stores.find(
    { "name": { $regex: "Consultants", $options: "i" } },
    { "_id": 1, "name": 1, "storeOpeningDate": 1 }
).limit(3)

Kueri mengembalikan kecocokan dengan nama toko yang berisi "Konsultan" terlepas dari kasusnya, membantu mengidentifikasi toko milik perusahaan konsultasi.

  {
    "_id": "39acb3aa-f350-41cb-9279-9e34c004415a",
    "name": "First Up Consultants | Bed and Bath Pantry - Port Antone",
    "storeOpeningDate": "2024-09-19T17:31:59.665Z"
  },
  {
    "_id": "26afb024-53c7-4e94-988c-5eede72277d5",
    "name": "First Up Consultants | Microphone Bazaar - South Lexusland",
    "storeOpeningDate": "2024-09-10T13:43:51.209Z"
  },
  {
    "_id": "62438f5f-0c56-4a21-8c6c-6bfa479494ad",
    "name": "First Up Consultants | Plumbing Supply Shoppe - New Ubaldofort",
    "storeOpeningDate": "2024-09-19T08:27:44.268Z"
  }

Contoh 2: Pencocokan pola tingkat lanjut untuk nama kategori

Contohnya menemukan toko yang menjual produk dengan nama kategori yang dimulai dengan vokal.

db.stores.find(
  {
    "sales.salesByCategory.categoryName": { $regex: "^[AEIOUaeiou]", $options: "" }
  },
  { "_id": 1, "name": 1, "sales.salesByCategory.categoryName": 1}
).limit(2)

Kueri menggunakan jangkar caret (^) dan kelas karakter untuk mencocokkan nama kategori yang dimulai dengan vokal.

  {
    "_id": "e6410bb3-843d-4fa6-8c70-7472925f6d0a",
    "name": "Relecloud | Toy Collection - North Jaylan",
    "sales": { 
      "salesByCategory": [ 
        { "categoryName": "Educational Toys" } 
      ] 
    }
  },
  {
    "_id": "4e064f0a-7e30-4701-9a80-eff3caf46ce8",
    "name": "Fourth Coffee | Outdoor Furniture Deals - Lucianohaven",
    "sales": {
      "salesByCategory": [
        { "categoryName": "Outdoor Swings" },
        { "categoryName": "Hammocks" }
      ]
    }
  }

Contoh 3: Temukan penyimpanan dengan konvensi penamaan tertentu

Contoh menemukan penyimpanan dengan nama yang berisi pemisah karakter pipa (|).

db.stores.find(
{ "name": { $regex: "\\|" }},
{ "_id": 1, "name": 1, "sales.salesByCategory.categoryName": 1}).limit(2)

Kueri mencari penyimpanan dengan nama yang berisi karakter pipa, yang tampaknya merupakan konvensi penamaan dalam himpunan data.

  {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
    "name": "Trey Research | Home Office Depot - Lake Freeda",
    "sales": { 
      "salesByCategory": [ 
        { "categoryName": "Desk Lamps" } 
      ] 
    }
  },
  {
    "_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
    "name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
    "sales": { 
      "salesByCategory": [ 
        { "categoryName": "Stockings" } 
      ] 
    }
  }

Contoh 4: Pola kompleks untuk kategori diskon

Contohnya menemukan toko dengan kategori yang berisi "Bath" dan diakhir dengan "s".

db.stores.aggregate([
  { $match: { "promotionEvents.discounts.categoryName": { $regex: "Bath.*s$", $options: "i" } } },
  { $project: { "_id": 1, "name": 1, "promotionEvents.discounts.categoryName":1 }},
  { $match: {"promotionEvents.discounts.categoryName": { $ne: [] }} },
  { $limit: 2 }])

Kueri menggabungkan beberapa fitur regex: pencocokan teks literal, kuantifier dot-star (.*), dan jangkar akhir string ($).

{
    "_id": "39acb3aa-f350-41cb-9279-9e34c004415a",
    "name": "First Up Consultants | Bed and Bath Pantry - Port Antone",
    "promotionEvents": [
      {
        "discounts": [
          { "categoryName": "Bath Sheets", "discountPercentage": 16 },
          { "categoryName": "Bath Accessories", "discountPercentage": 11 }
        ]
      },
      {
        "discounts": [ 
          { "categoryName": "Bath Mats", "discountPercentage": 22 } 
        ]
      },
      {
        "discounts": [
          { "categoryName": "Bath Towels", "discountPercentage": 21 },
          { "categoryName": "Bathrobes", "discountPercentage": 19 },
          { "categoryName": "Bath Accessories", "discountPercentage": 5 }
        ]
      },
      {
        "discounts": [
          { "categoryName": "Bath Sheets", "discountPercentage": 25 },
          { "categoryName": "Bath Towels", "discountPercentage": 15 }
        ]
      }
    ]
  },
  {
    "_id": "27ef6004-70fa-4217-8395-0eabc4cc9841",
    "name": "Fabrikam, Inc. | Bed and Bath Store - O'Connerborough",
    "promotionEvents": [
      {
        "discounts": [
          { "categoryName": "Bath Accessories", "discountPercentage": 24 }
        ]
      },
      {
        "discounts": [
          { "categoryName": "Bathrobes", "discountPercentage": 18 },
          { "categoryName": "Bath Towels", "discountPercentage": 14 },
          { "categoryName": "Bath Accessories", "discountPercentage": 20 }
        ]
      }
    ]
  }