Regulárny výraz MongoDB (regulárny výraz) s príkladmi

Obsah:

Anonim

Regulárne výrazy sa používajú na porovnávanie vzorov, čo je v podstate pre reťazce nálezov v dokumentoch.

Niekedy pri načítaní dokumentov v zbierke nemusíte vedieť, akú presnú hodnotu poľa hľadať. Preto je možné použiť regulárne výrazy na pomoc pri načítaní údajov na základe vyhľadávacích hodnôt zodpovedajúcich vzorom.

V tomto výučbe sa dozviete -

  • Na porovnávanie vzorov sa používa operátor $ regex
  • Zhoda vzoru s možnosťami $
  • Zhoda vzorov bez operátora regulárneho výrazu
  • Načítava sa posledných 'n' dokumentov zo zbierky

Na porovnávanie vzorov sa používa operátor $ regex

Operátor regulárneho výrazu v MongoDB sa používa na vyhľadávanie konkrétnych reťazcov v zbierke. Nasledujúci príklad ukazuje, ako sa to dá urobiť.

Predpokladajme, že máme rovnakú kolekciu zamestnancov, ktorá má názvy polí „Employeeid“ a „EmployeeName“. Predpokladajme tiež, že vo svojej zbierke máme nasledujúce dokumenty.

Zamestnanecké ID Meno zamestnanca
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

Tu v nižšie uvedenom kóde sme na určenie kritérií vyhľadávania použili operátor regulárneho výrazu.

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

Vysvetlenie kódu:

  1. Tu chceme nájsť všetky mená zamestnancov, ktoré majú znaky „Gu“. Preto zadáme operátor $ regex na definovanie kritérií vyhľadávania výrazu „Gu“
  2. Printjson sa používa na lepšiu tlač každého dokumentu, ktorý je vrátený dotazom.

Ak je príkaz vykonaný úspešne, zobrazí sa nasledujúci výstup:

Výkon:

Výstup jasne ukazuje, že sa vrátia tie dokumenty, v ktorých meno zamestnanca obsahuje znaky „Gu“.

Predpokladajme, že vaša zbierka obsahuje nasledujúce dokumenty s ďalším dokumentom, ktorý obsahoval meno zamestnanca ako „Guru999“. Ak ste zadali kritériá vyhľadávania ako „Guru99“, vráti sa vám aj dokument, ktorý mal „Guru999“. Ale predpokladajme, že keby sme to nechceli a chceli by sme vrátiť dokument iba s „Guru99“. Potom to môžeme urobiť pomocou presnej zhody vzorov. Na presné porovnanie vzorov použijeme znaky a $. Pridáme znak na začiatok reťazca a $ na koniec reťazca.

Zamestnanecké ID Meno zamestnanca
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Nasledujúci príklad ukazuje, ako sa to dá urobiť.

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

Vysvetlenie kódu:

  1. Tu v kritériách vyhľadávania používame znaky a $. Znak sa používa na zabezpečenie toho, aby sa reťazec začínal určitým znakom, a znak $ sa používa na zabezpečenie toho, aby sa reťazec končil určitým znakom. Takže keď sa kód spustí, načíta iba reťazec s názvom „Guru99“.
  2. Printjson sa používa na lepšiu tlač každého dokumentu, ktorý je vrátený dotazom.

Ak je príkaz vykonaný úspešne, zobrazí sa nasledujúci výstup:

Výkon:

Na výstupe je jasne viditeľné, že sa načítal reťazec „Guru99“.

Zhoda vzoru s možnosťami $

Pri použití operátora regulárneho výrazu je možné poskytnúť ďalšie možnosti pomocou kľúčového slova $ options . Predpokladajme napríklad, že ste chceli nájsť všetky dokumenty, ktoré mali v mene zamestnanca znak „Gu“, bez ohľadu na to, či sa v ňom rozlišujú veľké a malé písmená. Ak je taký výsledok požadovaný, potom musíme použiť možnosti $ s parametrom necitlivosti na malé a veľké písmená.

Nasledujúci príklad ukazuje, ako sa to dá urobiť.

Predpokladajme, že máme rovnakú kolekciu zamestnancov, ktorá má názvy polí „Employeeid“ a „EmployeeName“.

Predpokladajme tiež, že vo svojej zbierke máme nasledujúce dokumenty.

Zamestnanecké ID Meno zamestnanca
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 99 GURU

Ak teraz spustíme rovnaký dopyt ako v poslednej téme, nikdy by sme vo výsledku neuvideli dokument, ktorý by mal „GURU99“. Aby sme zaistili, že sa to dostane do množiny výsledkov, musíme pridať parameter $ options „I“.

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

Vysvetlenie kódu:

  1. Možnosti $ s parametrom „I“ (čo znamená necitlivosť na veľké a malé písmená) špecifikujú, že chceme vykonať vyhľadávanie bez ohľadu na to, či nájdeme písmená „Gu“ malé alebo veľké.

Ak je príkaz vykonaný úspešne, zobrazí sa nasledujúci výstup:

Výkon:

  1. Výstup jasne ukazuje, že aj keď má jeden dokument veľké písmeno „Gu“, dokument sa stále zobrazí v množine výsledkov.

Zhoda vzorov bez operátora regulárneho výrazu

Dá sa tiež urobiť zhoda vzorov bez operátora regulárneho výrazu. Nasledujúci príklad ukazuje, ako sa to dá urobiť.

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

Vysvetlenie kódu:

  1. Možnosti „//“ v podstate znamenajú špecifikovať kritériá vyhľadávania v rámci týchto oddeľovačov. Preto zadávame / Gu /, aby sme znova našli tie dokumenty, ktoré majú v názve EmployeeName „Gu“.

Ak je príkaz vykonaný úspešne, zobrazí sa nasledujúci výstup:

Výkon:

Výstup jasne ukazuje, že sa vrátia tie dokumenty, v ktorých meno zamestnanca obsahuje znaky „Gu“.

Načítava sa posledných 'n' dokumentov zo zbierky

Existuje niekoľko spôsobov, ako získať posledných n dokumentov v zbierke.

Pozrime sa na jeden zo spôsobov prostredníctvom nasledujúcich krokov

Nasledujúci príklad ukazuje, ako sa to dá urobiť.

Predpokladajme, že máme rovnakú kolekciu zamestnancov, ktorá má názvy polí „Employeeid“ a „EmployeeName“.

Predpokladajme tiež, že v našej zbierke máme nasledujúce dokumenty:

Zamestnanecké ID Meno zamestnanca
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 99 GURU
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Vysvetlenie kódu:

1) Pri vyhľadávaní dokumentov použite funkciu zoradenia na zoradenie záznamov v opačnom poradí na základe hodnoty poľa _id v zbierke. -1 v zásade označuje triedenie dokumentov v opačnom poradí alebo v zostupnom poradí, takže posledný dokument sa stane prvým dokumentom, ktorý sa zobrazí.

2) Potom pomocou doložky o limite iba zobrazte požadovaný počet záznamov. Tu sme nastavili limitnú klauzulu (2), takže sa načítajú posledné dva dokumenty.

Ak je príkaz vykonaný úspešne, zobrazí sa nasledujúci výstup:

Výkon:

Výstup jasne ukazuje, že sú zobrazené posledné dva dokumenty v zbierke. Preto sme jasne ukázali, že na získanie posledných 'n' dokumentov v zbierke môžeme najskôr dokumenty zoradiť zostupne a potom pomocou klauzuly limit vrátiť požadovaný počet dokumentov 'n'.

Poznámka : Ak sa vyhľadávanie vykonáva na reťazci, ktorý má viac ako povedzme 38 000 znakov, nezobrazia sa správne výsledky.

Zhrnutie:

  • Priraďovanie vzorov môže dosiahnuť operátor $ regex. Tento operátor možno použiť na vyhľadanie určitých reťazcov v zbierke.
  • Symbol a $ je možné použiť na presné textové vyhľadávanie, pričom sa používa na zaistenie toho, aby sa reťazec začínal určitým znakom a $ sa používa na zabezpečenie toho, aby sa reťazec končil určitým znakom.
  • Písmeno „i“ spolu s operátorom $ regex možno použiť na určenie necitlivosti písmen, aby bolo možné prehľadávať reťazce, či sú malé alebo veľké.
  • Oddeľovače // možno použiť aj na porovnávanie vzorov.
  • Na vrátenie posledných n dokumentov v zbierke použite kombináciu funkcií zoradenia a obmedzenia. Funkciu triedenia je možné použiť na vrátenie dokumentov v zostupnom poradí, potom je možné pomocou limitnej doložky obmedziť počet vrátených dokumentov.