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