با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، این جلسه از آموزش های MongoDB را تعریف عبارات منظم در MongoDB آغاز می کنیم. عبارات منظم اغلب در همه زبان ها برای جستجوی الگوی یا کلمه در هر رشته استفاده می شود. عبارات منظم در MongoDB برای تطابق الگوی رشته استفاده از عملیات regex$ را فراهم می کند. MongoDB از PCRE که مخفف (Perl Compatible Regular Expression) استفاده می کند که یک زبان برای عبارات منظم می باشد.
بر خلاف جستجوی متن، ما نیازی به انجام تنظیمات و دستور برای استفاده از عبارات منظم نداریم.
ساختار سند زیر را در مجموعه posts است و شامل post text و tags می باشد را در نظر بگیرید :
1 2 3 4 5 6 7 | { "post_text": "enjoy the mongodb articles on tutorialspoint", "tags": [ "mongodb", "tutorialspoint" ] } |
کوئری regex زیر همه پست هایی که حاوی آموزش tutorialspoint در آن است را جستجو می کند :
1 | >db.posts.find({post_text:{$regex:"tutorialspoint"}}) |
همان query نیز می تواند به شکل دیگری نوشته شود :
1 | >db.posts.find({post_text:/tutorialspoint/}) |
برای ایجاد حساسیت جستجو، از پارامتر options$ با مقدار i$ استفاده می کنیم.
دستور زیر به دنبال رشته هایی با کلمه “tutorialspoint”، صرف نظر از حروف کوچکت یا بزرگ است.
1 | >db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}}) |
یکی از نتایجی که از این کوئری برگردانده می شود، سند زیر است که شامل کلمه هایی است که حاوی tutorialspoint می باشد.
1 2 3 4 5 | { "_id" : ObjectId("53493d37d852429c10000004"), "post_text" : "hey! this is my post on TutorialsPoint", "tags" : [ "tutorialspoint" ] } |
ما همچنین می توانیم از مفهوم regex در فیلد آرایه استفاده کنیم. این ویژه هنگامی مهم است که ما قابلیت تگ ها را اجرا کنیم.
بنابراین اگر میخواهید تمام پستهایی که حاوی تگ های است که با کلمه tutorial شروع شده (tutorials یا tutorialpoint یا tutorialphp) را جستجو کنید، می توانید از کد زیر استفاده کنید :
1 | >db.posts.find({tags:{$regex:"tutorial"}}) |
اگر فیلدهای سند فهرست شوند، کوئری از مقادیر فهرست برای مطابقت با عبارات منظم استفاده می کند.
این کار باعث می شود جستجو در مقایسه با اسکن عبارات منظم کل مجموعه بسیار سریعتر شود.
اگر عبارات منظم یک علامت پیشوند داشته باشد، تمام مطابقات به معنای شروع یک کاراکتر رشته ای خاص است. به عنوان مثال، اگر عبارت regex حاوی، tut^ باشد، کوئری فقط برای آن رشته هایی که با tut شروع می شوند را جستجو می کند.