Wyrażenie regularne MongoDB (Regex) z przykładami

Spisie treści:

Anonim

Wyrażenia regularne są używane do dopasowywania wzorców, co zasadniczo dotyczy ciągów wyników w dokumentach.

Czasami podczas pobierania dokumentów w kolekcji możesz nie wiedzieć dokładnie, jakiej wartości pola należy szukać. W związku z tym można używać wyrażeń regularnych, aby pomóc w pobieraniu danych w oparciu o wyszukiwane wartości pasujące do wzorców.

W tym samouczku nauczysz się -

  • Używanie operatora $ regex do dopasowywania wzorca
  • Dopasowanie wzorca z opcjami $
  • Dopasowanie wzorca bez operatora wyrażenia regularnego
  • Pobieranie ostatnich „n” dokumentów z kolekcji

Używanie operatora $ regex do dopasowywania wzorca

Operator wyrażenia regularnego w MongoDB służy do wyszukiwania określonych ciągów w kolekcji. Poniższy przykład pokazuje, jak można to zrobić.

Załóżmy, że mamy tę samą kolekcję Employee, która ma nazwy pól „Employeeid” i „EmployeeName”. Załóżmy też, że w naszej kolekcji mamy następujące dokumenty.

Numer identyfikacyjny pracownika imię i nazwisko pracownika
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang

W poniższym kodzie użyliśmy operatora regex do określenia kryteriów wyszukiwania.

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

Objaśnienie kodu:

  1. Tutaj chcemy znaleźć wszystkie nazwiska pracowników, które zawierają znaki „Gu”. Dlatego określamy operator $ regex, aby zdefiniować kryteria wyszukiwania „Gu”
  2. Printjson jest używany do drukowania każdego dokumentu zwracanego przez zapytanie w lepszy sposób.

Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:

Wynik:

Wynik jasno pokazuje, że te dokumenty, w których nazwa pracownika zawiera znaki „Gu”, są zwracane.

Jeśli załóżmy, że w Twojej kolekcji znajdują się następujące dokumenty z dodatkowym dokumentem zawierającym nazwisko pracownika „Guru999”. Jeśli wpiszesz kryteria wyszukiwania jako „Guru99”, zwróci to również dokument, który miał „Guru999”. Ale przypuśćmy, że gdybyśmy tego nie chcieli i chcieli tylko zwrócić dokument z „Guru99”. Następnie możemy to zrobić z dokładnym dopasowaniem do wzorca. Aby dokładnie dopasować wzorzec, użyjemy znaków i $. Dodamy znak na początku ciągu i $ na końcu.

Numer identyfikacyjny pracownika imię i nazwisko pracownika
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
8 Guru999

Poniższy przykład pokazuje, jak można to zrobić.

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

Objaśnienie kodu:

  1. Tutaj w kryteriach wyszukiwania używamy znaków i $. Służy do upewnienia się, że ciąg zaczyna się od określonego znaku, a $ służy do upewnienia się, że ciąg kończy się określonym znakiem. Więc kiedy kod zostanie wykonany, pobierze tylko ciąg o nazwie „Guru99”.
  2. Printjson jest używany do drukowania każdego dokumentu zwracanego przez zapytanie w lepszy sposób.

Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:

Wynik:

Na wyjściu widać wyraźnie, że został pobrany ciąg „Guru99”.

Dopasowanie wzorca z opcjami $

Używając operatora wyrażenia regularnego, można również udostępnić dodatkowe opcje za pomocą słowa kluczowego $ options . Na przykład załóżmy, że chcesz znaleźć wszystkie dokumenty, które miały „Gu” w nazwisku pracownika, niezależnie od tego, czy uwzględniana była wielkość liter, czy nie. Jeśli taki wynik jest pożądany, musimy użyć opcji $ z parametrem niewrażliwości na wielkość liter.

Poniższy przykład pokazuje, jak można to zrobić.

Załóżmy, że mamy tę samą kolekcję Employee, która ma nazwy pól „Employeeid” i „EmployeeName”.

Załóżmy też, że w naszej kolekcji mamy następujące dokumenty.

Numer identyfikacyjny pracownika imię i nazwisko pracownika
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99

Teraz, gdybyśmy uruchomili to samo zapytanie, co w poprzednim temacie, nigdy nie zobaczylibyśmy w wyniku dokumentu z „GURU99”. Aby upewnić się, że pojawi się on w zestawie wyników, musimy dodać parametr $ options "I".

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

Objaśnienie kodu:

  1. Opcja $ z parametrem „I” (co oznacza niewrażliwość na wielkość liter) określa, że ​​chcemy przeprowadzić wyszukiwanie bez względu na to, czy znajdziemy litery „Gu” małymi czy dużymi literami.

Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:

Wynik:

  1. Wynik jasno pokazuje, że chociaż jeden dokument ma duże litery „Gu”, dokument nadal jest wyświetlany w zestawie wyników.

Dopasowanie wzorca bez operatora wyrażenia regularnego

Można również dopasować wzorce bez operatora regex. Poniższy przykład pokazuje, jak można to zrobić.

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

Objaśnienie kodu:

  1. Opcje „//” zasadniczo oznaczają określenie kryteriów wyszukiwania w ramach tych separatorów. W związku z tym określamy / Gu /, aby ponownie znaleźć te dokumenty, które mają „Gu” w nazwie pracownika.

Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:

Wynik:

Wynik jasno pokazuje, że te dokumenty, w których nazwa pracownika zawiera znaki „Gu”, są zwracane.

Pobieranie ostatnich „n” dokumentów z kolekcji

Istnieje wiele sposobów na pobranie ostatnich n dokumentów w kolekcji.

Spójrzmy na jeden ze sposobów, wykonując następujące kroki

Poniższy przykład pokazuje, jak można to zrobić.

Załóżmy, że mamy tę samą kolekcję Employee, która ma nazwy pól „Employeeid” i „EmployeeName”.

Załóżmy też, że w naszej kolekcji mamy następujące dokumenty:

Numer identyfikacyjny pracownika imię i nazwisko pracownika
22 NewMartin
2 Mohan
3 Joe
4 MohanR
100 Guru99
6 Gurang
7 GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

Objaśnienie kodu:

1) Podczas wyszukiwania dokumentów użyj funkcji sortowania, aby posortować rekordy w odwrotnej kolejności na podstawie wartości pola _id w kolekcji. Wartość -1 oznacza w zasadzie sortowanie dokumentów w kolejności odwrotnej lub malejącej, tak aby ostatni dokument stał się pierwszym wyświetlanym dokumentem.

2) Następnie użyj klauzuli limit, aby wyświetlić tylko żądaną liczbę rekordów. Tutaj ustawiliśmy klauzulę limitu (2), więc pobierze ostatnie dwa dokumenty.

Jeśli polecenie zostanie wykonane pomyślnie, zostanie wyświetlony następujący wynik:

Wynik:

Wynik jasno pokazuje, że są wyświetlane ostatnie dwa dokumenty w kolekcji. Dlatego jasno pokazaliśmy, że aby pobrać ostatnie „n” dokumentów w kolekcji, możemy najpierw posortować dokumenty w porządku malejącym, a następnie użyć klauzuli limitu, aby zwrócić „n” liczby wymaganych dokumentów.

Uwaga : Jeśli wyszukiwanie zostanie przeprowadzone na ciągu dłuższym niż powiedzmy 38 000 znaków, nie wyświetli poprawnych wyników.

Podsumowanie:

  • Dopasowanie wzorca można uzyskać za pomocą operatora $ regex. Ten operator może służyć do znajdowania określonych ciągów w kolekcji.
  • Symbole i $ mogą być używane do dokładnego wyszukiwania tekstu, przy czym jest używane, aby upewnić się, że ciąg zaczyna się od określonego znaku, a $ jest używane w celu upewnienia się, że ciąg kończy się określonym znakiem.
  • „I” wraz z operatorem $ regex może służyć do określania niewrażliwości na wielkość liter, dzięki czemu można wyszukiwać łańcuchy, niezależnie od tego, czy są zapisane małymi, czy dużymi literami.
  • Separatory // mogą również służyć do dopasowywania wzorców.
  • Użyj kombinacji sortowania i funkcji limit, aby zwrócić ostatnie n dokumentów w kolekcji. Funkcja sortowania może służyć do zwracania dokumentów w kolejności malejącej, po czym można użyć klauzuli limitu, aby ograniczyć liczbę zwracanych dokumentów.