Partager via


$regex (requête d’évaluation)

S’APPLIQUE À : MongoDB vCore

L’opérateur $regex fournit des fonctionnalités d’expression régulière pour la correspondance de modèles dans les requêtes. Il vous permet de rechercher des documents dans lesquels un champ correspond à un modèle d’expression régulière spécifié. Cet opérateur est utile pour la recherche de chaînes flexibles, la validation de modèle et les opérations de filtrage de texte complexes.

Syntaxe

La syntaxe de l’opérateur $regex est la suivante :

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

Ou le formulaire plus court :

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

Paramètres

Descriptif
<field> Champ dans lequel effectuer une recherche. Doit contenir des valeurs de chaîne.
<pattern> Modèle d’expression régulière à mettre en correspondance.
<options> Optionnel. Options d’expression régulière, telles que la correspondance sans respect de la casse. Les options courantes incluent 'i' (ne respectant pas la casse), 'm' (multiligne), 's' (dot all) et 'x' (étendu).

Exemple :

Exemple 1 : Rechercher des magasins par modèle de nom

L’exemple recherche tous les magasins contenant « Consultants » dans leur nom (sans respect de la casse).

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

La requête retourne des correspondances avec les noms des magasins contenant « Consultants », quel que soit le cas, ce qui permet d’identifier les magasins appartenant à des sociétés de conseil.

  {
    "_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"
  }

Exemple 2 : Correspondance de modèle avancé pour les noms de catégorie

L’exemple recherche les magasins vendant des produits avec un nom de catégorie qui commence par une voyelle.

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

La requête utilise l’ancre et la classe de caractères du point de vue (^) pour faire correspondre les noms de catégorie commençant par des voyelles.

  {
    "_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" }
      ]
    }
  }

Exemple 3 : Rechercher des magasins avec des conventions d’affectation de noms spécifiques

L’exemple recherche des magasins avec des noms contenant un séparateur de caractères de canal (|).

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

La requête recherche des magasins avec des noms contenant le caractère de canal, qui semble être une convention d’affectation de noms dans le jeu de données.

  {
    "_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" } 
      ] 
    }
  }

Exemple 4 : Modèle complexe pour les catégories de remise

L’exemple recherche les magasins avec des catégories contenant à la fois « Bath » et se terminant par « 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 }])

La requête combine plusieurs caractéristiques d’expression régulière : correspondance de texte littéral, quantificateur point-étoile (.*) et ancre de fin de chaîne ($).

{
    "_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 }
        ]
      }
    ]
  }