MongoDB 正则表达式($regex)
在MongoDB中,正则表达式用于模式匹配,基本上是用于在文档中搜索字符串中的模式。它是一种将模式与字符序列匹配的通用方法。$regex
运算符用作正则表达式,用于在字符串中查找模式。
在MongoDB中,我们可以以两种不同的方式进行模式匹配:
- 使用
$regex
运算符进行模式匹配 - 不使用
$regex
运算符进行模式匹配
使用$regex
运算符进行模式匹配
在MongoDB中,$regex
运算符提供了在查询中进行模式匹配的功能。换句话说,regex运算符用于在文档中搜索特定的字符串。
注意:不允许在regex运算符内部使用$in
运算符。
语法
{ <field>: { regex: /pattern/,options: '<options>' } }
{ <field>: { regex: 'pattern',options: '<options>' } }
$options:
下面的<option>
可以与正则表达式一起使用:
- “i”字符用于在字符串中匹配大小写模式。
^
和$
符号用于在文档中搜索特定模式。^
符号用于确保字符串以特定字符开头,$
用于确保字符串以特定字符结尾。- “x”字符用于忽略字符串中的所有空白字符。
示例
在以下示例中,我们使用的是:
Database: javaTpoint
Collection: student
Document: Five documents that contain the details of the students
>db.student.find()
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d65f"),
"name" : "Mick",
"Course" : "btech",
"batch_year" : 2018,
"language" : ["c++", "java", "python"],
"personal_details" :
{
"Father_name" : "Jonny",
"phone_no" : 8895321456,
"age" : 23,
"gender" : "Male",
"City" : "NewYork",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d691"),
"name" : "MIck99",
"Course" : "BCA",
"batch_year" : 2020,
"language" : ["C#", "JavaScript"],
"personal_details" :
{
"Father_name" : "Henry",
"phone_no" : 9874563698,
"age" : 20,
"gender" : "Female",
"City" : "London",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d655"),
"name" : "Jonny",
"Course" : "MCALE",
"batch_year" : 2019,
"language" : ["C#", "java", "PHP"],
"personal_details" :
{
"Father_name" : "Thomas",
"phone_no" : 7845123698,
"age" : 24,
"gender" : "Male",
"City" : "London",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d678"),
"name" : "Oliver",
"Course" : "MCA",
"batch_year" : 2017,
"language" : ["c", "PHP"],
"personal_details" :
{
"Father_name" : "William",
"phone_no" : 9997845123,
"age" : 25,
"gender" : "Male",
"City" : "Liverpool",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d665"),
"name" : "mia",
"Course" : "btech",
"batch_year" : 2020,
"language" : ["HTML", "CSS", "PHP"],
"personal_details" :
{
"Father_name" : "Leo",
"phone_no" : 6312547896,
"age" : 22,
"gender" : "Female",
"City" : "Manchester",
}
}
示例1:显示正在攻读B.Tech的学生的详细信息。
我们正在显示课程为btech的学生的详细信息,因此我们在find()方法中使用了正则表达式(即{$regex:”btech”})来传递课程字段。
>db.student.find({Course : {$regex: "btech" }}).forEach(printjson)
注意:使用Printjson来更好地打印查询返回的每个文档。
输出:
>db.student.find({Course : {$regex: "btech" }}).forEach(printjson)
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d65f"),
"name" : "Mick",
"Course" : "btech",
"batch_year" : 2018,
"language" : ["c++", "java", "python"],
"personal_details" :
{
"Father_name" : "Jonny",
"phone_no" : 8895321456,
"age" : 23,
"gender" : "Male",
"City" : "NewYork",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d665"),
"name" : "mia",
"Course" : "btech",
"batch_year" : 2020,
"language" : ["HTML", "CSS", "PHP"],
"personal_details" :
{
"Father_name" : "Leo",
"phone_no" : 6312547896,
"age" : 22,
"gender" : "Female",
"City" : "Manchester",
}
}
**示例2:使用i <options>
显示名字以“Mi”开头的学生的详细信息。 **
>db.student.find({name:{regex: "Mi",options:'i'}}).forEach(printjson)
注意:使用Printjson更好地打印每个由查询返回的文档。
输出:
>db.student.find({name:{regex: "Mi",options:'i'}}).forEach(printjson)
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d65f"),
"name" : "Mick",
"Course" : "btech",
"batch_year" : 2018,
"language" : ["c++", "java", "python"],
"personal_details" :
{
"Father_name" : "Jonny",
"phone_no" : 8895321456,
"age" : 23,
"gender" : "Male",
"City" : "NewYork",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d691"),
"name" : "MIck99",
"Course" : "BCA",
"batch_year" : 2020,
"language" : ["C#", "JavaScript"],
"personal_details" :
{
"Father_name" : "Henry",
"phone_no" : 9874563698,
"age" : 20,
"gender" : "Female",
"City" : "London",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d665"),
"name" : "mia",
"Course" : "btech",
"batch_year" : 2020,
"language" : ["HTML", "CSS", "PHP"],
"personal_details" :
{
"Father_name" : "Leo",
"phone_no" : 6312547896,
"age" : 22,
"gender" : "Female",
"City" : "Manchester",
}
}
示例3:显示课程为MCA的学生的详细信息。
>db.student.find({Course : {regex: "^MCA"}}).forEach(printjson)
注意:正在使用Printjson来更好地打印每个查询返回的文档。
输出:
>db.student.find({Course : {regex: "^MCA"}}).forEach(printjson)
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d678"),
"name" : "Oliver",
"Course" : "MCA",
"batch_year" : 2017,
"language" : ["c", "PHP"],
"personal_details" :
{
"Father_name" : "William",
"phone_no" : 9997845123,
"age" : 25,
"gender" : "Male",
"City" : "Liverpool",
}
}
无需使用$regex
操作符的模式匹配
在MongoDB中,我们可以使用正则表达式对象进行模式匹配,而无需使用$regex操作符。
语法
{ : /pattern/ }
示例4: 使用正则表达式对象显示姓名中包含”ck”的学生的详细信息。
>db.student.find({name: /ck/}).forEach(printjson)
将下面的英文翻译成中文,不解释,保留HTML格式:
“//”意味着在这些定界符中指定您的搜索条件。所以,我们要寻找文件名中包含“CK”的文档。
输出:
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d65f"),
"name" : "Mick",
"Course" : "btech",
"batch_year" : 2018,
"language" : ["c++", "java", "python"],
"personal_details" :
{
"Father_name" : "Jonny",
"phone_no" : 8895321456,
"age" : 23,
"gender" : "Male",
"City" : "NewYork",
}
}
{
"_id" : ObjectId("56254d4fdf2222265r4g12ds3d691"),
"name" : "MIck99",
"Course" : "BCA",
"batch_year" : 2020,
"language" : ["C#", "JavaScript"],
"personal_details" :
{
"Father_name" : "Henry",
"phone_no" : 9874563698,
"age" : 20,
"gender" : "Female",
"City" : "London",
}
}