MongoDB - wyrażenie regularne
Wyrażenia regularne są często używane we wszystkich językach do wyszukiwania wzorca lub słowa w dowolnym ciągu. MongoDB zapewnia również funkcjonalność wyrażeń regularnych do dopasowywania wzorców ciągów przy użyciu$regexoperator. MongoDB używa PCRE (wyrażenie regularne kompatybilne z Perlem) jako języka wyrażeń regularnych.
W przeciwieństwie do wyszukiwania tekstu, nie musimy wykonywać żadnej konfiguracji ani polecenia, aby używać wyrażeń regularnych.
Załóżmy, że wstawiliśmy dokument do bazy danych o nazwie posts jak pokazano poniżej -
> db.posts.insert(
{
"post_text": "enjoy the mongodb articles on tutorialspoint",
"tags": [
"mongodb",
"tutorialspoint"
]
}
WriteResult({ "nInserted" : 1 })
Korzystanie z wyrażenia regularnego
Następujące zapytanie regularne wyszukuje wszystkie posty zawierające ciąg tutorialspoint w tym -
> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty()
{
"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
{
"_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
"post_text" : "enjoy the mongodb articles on tutorialspoint",
"tags" : [
"mongodb",
"tutorialspoint"
]
}
>
To samo zapytanie można również zapisać jako -
>db.posts.find({post_text:/tutorialspoint/})
Używanie wyrażenia regularnego z rozróżnianiem wielkości liter
Aby wyszukiwanie było niewrażliwe na wielkość liter, używamy rozszerzenia $options parametr z wartością $i. Następujące polecenie będzie szukać ciągów zawierających to słowotutorialspointniezależnie od przypadku mniejszego lub większego -
>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})
Jednym z wyników zwróconych przez to zapytanie jest następujący dokument zawierający to słowo tutorialspoint w różnych przypadkach -
{
"_id" : ObjectId("53493d37d852429c10000004"),
"post_text" : "hey! this is my post on TutorialsPoint",
"tags" : [ "tutorialspoint" ]
}
Używanie wyrażenia regularnego dla elementów tablicy
Możemy również użyć koncepcji wyrażenia regularnego w polu tablicy. Jest to szczególnie ważne, gdy wdrażamy funkcjonalność tagów. Tak więc, jeśli chcesz wyszukać wszystkie posty mające tagi rozpoczynające się od słowa tutorial (samouczek lub samouczki, tutorialpoint lub tutorialphp), możesz użyć następującego kodu -
>db.posts.find({tags:{$regex:"tutorial"}})
Optymalizacja zapytań wyrażeń regularnych
Jeśli pola dokumentu to indexed, zapytanie użyje indeksowanych wartości do dopasowania wyrażenia regularnego. To sprawia, że wyszukiwanie jest bardzo szybkie w porównaniu z wyrażeniem regularnym skanującym całą kolekcję.
Jeśli wyrażenie regularne to prefix expression, wszystkie dopasowania mają rozpoczynać się od określonego ciągu znaków. Na przykład, jeśli wyrażenie regex to^tut, zapytanie musi szukać tylko tych ciągów, które zaczynają się od tut.