🌟Regular Expression in MongoDB 🌟
Regular Expressions:
Matching patterns via regular expressions for string matching during querying.
Syntax:
The $options clause takes the following as parameters:
- i → Performs a case insensitive match.
- m → Performs pattern match that consists of anchors i.e. ^ for the beginning, $ for the end.
- x → Ignores all white space characters in the pattern.
- s → Allows dot character ( . ) to match all characters.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Example :
for regular expression we will use student database:
Inserting documents to student database in collections students_details:
> db.students_details.insertMany([
{ sno:111, sname:”AAA”, grade: “I”, marks: 93, remarks: “Very obedient and an ideal student” },
{ sno:222, sname:”BBB”, grade: “II”, marks: 90, remarks: “very obedient and punctual” },
{ sno:333, sname:”CCC”, grade: “IV”, marks: 76, remarks: “Needs improvement in communication skills” },
{ sno:444, sname:”DDD”, grade: “III”, marks: 88, remarks: “Should be punctual” }
])
Perform a LIKE match :
The following example matches all documents where the Sname
field is like "DDD"
:
> db.students_details.find(
{ sname: { $regex: /DDD$/ } }
)
The following example matches all documents where the remarks
field is like "very"
:
> db.students_details.find(
{ remarks: { $regex: /very/ } }
)
Perform Case-Insensitive Regular Expression Match:
By Using options ‘i’ to perform a case-insensitive match for documents with remarks
value that starts with "very" :
> db.students_details.find(
{ remarks: { $regex: /^very/i } }
)
OR
> db.students_details.find(
{ remarks: { $regex: /^very/, $options: 'i' } }
)
OR
> db.students_details.find(
{ remarks: { $regex: '^very', $options: 'i' } }
)
match for documents with remarks
value that ends with "punctual" :
> db.students_details.find(
{ remarks: { $regex: /punctual$/i } }
)
Multiline Match for Lines Starting with Specified Pattern:
lets insert some more documents in students :
> db.students_details.insertOne(
{ sno:555, sname:”EEE”, grade: “I”, marks: 87, remarks: “Very obedient.\nShould be punctual” }
)
The following example uses the m
option to match lines starting with the letter S
for multiline strings(in any line which starts with ‘S’):
> db.students_details.find({ remarks: { $regex: /^S/, $options: ‘m’ } } )
IF we remove options ‘m’ then it will give output one document.
Thank you….