Expression régulière MongoDB (Regex) avec des exemples

Table des matières:

Anonim

Les expressions régulières sont utilisées pour la correspondance de modèles, qui est essentiellement pour les chaînes de résultats dans les documents.

Parfois, lors de la récupération de documents dans une collection, vous ne savez peut-être pas exactement quelle est la valeur exacte du champ à rechercher. Par conséquent, on peut utiliser des expressions régulières pour aider à récupérer des données en fonction des valeurs de recherche de correspondance de modèle.

Dans ce tutoriel, vous apprendrez -

  • Utilisation de l'opérateur $ regex pour la correspondance de modèles
  • Correspondance de motifs avec $ options
  • Correspondance de modèle sans l'opérateur regex
  • Récupération des derniers «n» documents d'une collection

Utilisation de l'opérateur $ regex pour la correspondance de modèles

L'opérateur regex dans MongoDB est utilisé pour rechercher des chaînes spécifiques dans la collection. L'exemple suivant montre comment cela peut être fait.

Supposons que nous ayons notre même collection Employee qui a les noms de champ "Employeeid" et "EmployeeName". Supposons également que nous ayons les documents suivants dans notre collection.

Identifiant d'employé Nom de l'employé
22 NouveauMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

Ici, dans le code ci-dessous, nous avons utilisé l'opérateur regex pour spécifier les critères de recherche.

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

Explication du code:

  1. Ici, nous voulons trouver tous les noms d'employés qui contiennent les caractères «Gu». Par conséquent, nous spécifions l'opérateur $ regex pour définir les critères de recherche de 'Gu'
  2. Le printjson est utilisé pour imprimer chaque document renvoyé par la requête d'une meilleure manière.

Si la commande est exécutée avec succès, la sortie suivante sera affichée:

Production:

La sortie montre clairement que les documents dans lesquels le nom de l'employé contient les caractères «Gu» sont renvoyés.

Supposons que votre collection contienne les documents suivants avec un document supplémentaire contenant le nom de l'employé sous la forme "Guru999". Si vous avez entré les critères de recherche comme "Guru99", il renverrait également le document qui avait "Guru999". Mais supposons que si nous ne voulions pas cela et voulions seulement renvoyer le document avec "Guru99". Ensuite, nous pouvons le faire avec une correspondance de motif exacte. Pour faire une correspondance de motif exacte, nous utiliserons les caractères et $. Nous ajouterons le caractère au début de la chaîne et $ à la fin de la chaîne.

Identifiant d'employé Nom de l'employé
22 NouveauMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

L'exemple suivant montre comment cela peut être fait.

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson) 

Explication du code:

  1. Ici, dans les critères de recherche, nous utilisons les caractères et $. Le est utilisé pour s'assurer que la chaîne commence par un certain caractère, et $ est utilisé pour s'assurer que la chaîne se termine par un certain caractère. Ainsi, lorsque le code s'exécute, il ne récupérera que la chaîne avec le nom "Guru99".
  2. Le printjson est utilisé pour imprimer chaque document renvoyé par la requête d'une meilleure manière.

Si la commande est exécutée avec succès, la sortie suivante sera affichée:

Production:

Dans la sortie, il est clairement visible que la chaîne "Guru99" est récupérée.

Correspondance de motifs avec $ options

Lorsque vous utilisez l'opérateur regex, vous pouvez également fournir des options supplémentaires en utilisant le mot-clé $ options . Par exemple, supposons que vous vouliez rechercher tous les documents qui avaient «Gu» dans leur nom d'employé, qu'il soit sensible à la casse ou insensible. Si un tel résultat est souhaité, nous devons utiliser les options $ avec le paramètre d'insensibilité à la casse.

L'exemple suivant montre comment cela peut être fait.

Supposons que nous ayons notre même collection Employee qui a les noms de champ "Employeeid" et "EmployeeName".

Supposons également que nous ayons les documents suivants dans notre collection.

Identifiant d'employé Nom de l'employé
22 NouveauMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Maintenant, si nous exécutons la même requête que dans la dernière rubrique, nous ne verrons jamais le document avec "GURU99" dans le résultat. Pour nous assurer que cela figure dans le jeu de résultats, nous devons ajouter le paramètre $ options "I".

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson) 

Explication du code:

  1. Les $ options avec le paramètre 'I' (ce qui signifie insensibilité à la casse) spécifie que nous voulons effectuer la recherche, peu importe si nous trouvons les lettres 'Gu' en minuscules ou en majuscules.

Si la commande est exécutée avec succès, la sortie suivante sera affichée:

Production:

  1. La sortie montre clairement que même si un document a la majuscule «Gu», le document est toujours affiché dans le jeu de résultats.

Correspondance de modèle sans l'opérateur regex

On peut également faire de la correspondance de motifs sans l'opérateur regex. L'exemple suivant montre comment cela peut être fait.

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

Explication du code:

  1. Les options "//" signifient essentiellement de spécifier vos critères de recherche dans ces délimiteurs. Par conséquent, nous spécifions / Gu / pour retrouver à nouveau les documents qui ont «Gu» dans leur EmployeeName.

Si la commande est exécutée avec succès, la sortie suivante sera affichée:

Production:

La sortie montre clairement que les documents dans lesquels le nom de l'employé contient les caractères «Gu» sont renvoyés.

Récupération des derniers «n» documents d'une collection

Il existe différentes manières d'obtenir les n derniers documents d'une collection.

Examinons l'un des moyens via les étapes suivantes

L'exemple suivant montre comment cela peut être fait.

Supposons que nous ayons notre même collection Employee qui a les noms de champ "Employeeid" et "EmployeeName".

Supposons également que nous ayons les documents suivants dans notre collection:

Identifiant d'employé Nom de l'employé
22 NouveauMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Explication du code:

1) Lors de la recherche des documents, utilisez la fonction de tri pour trier les enregistrements dans l'ordre inverse en fonction de la valeur du champ _id dans la collection. Le -1 indique essentiellement de trier les documents dans l'ordre inverse ou dans l'ordre décroissant afin que le dernier document devienne le premier document à être affiché.

2) Utilisez ensuite la clause limit pour afficher simplement le nombre d'enregistrements souhaité. Ici, nous avons défini la clause limit (2), elle récupérera donc les deux derniers documents.

Si la commande est exécutée avec succès, la sortie suivante sera affichée:

Production:

La sortie montre clairement que les deux derniers documents de la collection sont affichés. Nous avons donc clairement montré que pour récupérer les derniers «n» documents de la collection, nous pouvons d'abord trier les documents par ordre décroissant puis utiliser la clause limit pour renvoyer le nombre «n» de documents requis.

Remarque : si la recherche est effectuée sur une chaîne de plus de 38 000 caractères, par exemple, elle n'affichera pas les bons résultats.

Résumé:

  • La correspondance de modèle peut être obtenue par l'opérateur $ regex. Cet opérateur peut être utilisé pour rechercher certaines chaînes de la collection.
  • Les symboles et $ peuvent être utilisés pour des recherches de texte exact avec étant utilisé pour s'assurer que la chaîne commence par un certain caractère et $ utilisé pour s'assurer que la chaîne se termine par un certain caractère.
  • Le 'i' avec l'opérateur $ regex peut être utilisé pour spécifier l'insensibilité à la casse afin que les chaînes puissent être recherchées, qu'elles soient en minuscules ou en majuscules.
  • Les délimiteurs // peuvent également être utilisés pour la mise en correspondance de modèles.
  • Utilisez une combinaison de tri et de fonction de limite pour renvoyer les n derniers documents de la collection. La fonction de tri peut être utilisée pour renvoyer les documents dans l'ordre décroissant, après quoi la clause limit peut être utilisée pour limiter le nombre de documents renvoyés.