MongoDb - Evaluation Query operator - $regex
Description
A regular expression is an important way of specifying a pattern for a complex search. The MongoDB $regex operator provides such a way to search a string after matching a specified pattern.
In MongoDB, matching the pattern can done by using regular expression objects or using the $regex operator.
Our database name is 'myinfo' and our collection name is 'student'. Here, is the collection bellow.
Sample collection "student"
[
{
"f_name" : "Zenny",
"sex" : "Female",
"class" : "VI",
"age" : 12,
"grd_point" : 32.6342
},
{
"f_name" : "Paul",
"sex" : "Male",
"class" : "VII",
"age" : 13,
"grd_point" : 29.5904
},
{
"f_name" : "Tom",
"sex" : "Male",
"class" : "VI",
"age" : 11,
"grd_point" : 30.1257
},
{
"f_name" : "Lassy",
"sex" : "Female",
"class" : "VIII",
"age" : 13,
"grd_point" : 28.2514
},
{
"f_name" : "Peter",
"sex" : "Male",
"class" : "VI",
"age" : 11,
"grd_point" : 31.5201
}
]
Example of MongoDB Evaluation Query operator - $regex
If we want to select all documents from the collection "student" which satisfying the condition -
The f_name must start with letter "P"
the following mongodb command can be used :
>db.student.find( { f_name: { $regex: 'P.*'} } ).pretty();
N.B. find() method displays the documents in a non structured format but to display the results in a formatted way, the pretty() method can be used.
SQL equivalent command is
SELECT * FROM student WHERE f_name LIKE 'P%';
Output
{
"_id" : ObjectId("527b3cc65ceafed9b2254a95"),
"f_name" : "Paul",
"sex" : "Male",
"class" : "VII",
"age" : 13,
"grd_point" : 29.5904
}
{
"_id" : ObjectId("527b3cc65ceafed9b2254a98"),
"f_name" : "Peter",
"sex" : "Male",
"class" : "VI",
"age" : 11,
"grd_point" : 31.5201
}
If we write the above mongodb statement like below no output will be available.
>db.student.find( { f_name: { $regex: 'p.*'} } ).pretty();
Because no f_name is starting with letter 'p'. In that case to avoid the case sensetivity we can write the above statement in following manner. Here is the example -
>db.student.find( { f_name: { $regex: 'p.*', $options: 'i' } } ).pretty();
The option "$option : i" is used to avoid the case sensitivity.
The above statement can be wirtte without using $regex but using regular expression objects. Here is the commands -
>db.student.find( { f_name: /p/i } ).pretty();
>db.student.find( { f_name: /P/ } ).pretty();
>db.student.find( { f_name: /^p/i } ).pretty();
? Source: http://www.w3resource.com/mongodb/mongodb-regex-operators.php