MongoDB 正则表达式($regex)

MongoDB 正则表达式($regex)

在MongoDB中,正则表达式用于模式匹配,基本上是用于在文档中搜索字符串中的模式。它是一种将模式与字符序列匹配的通用方法。$regex运算符用作正则表达式,用于在字符串中查找模式。

在MongoDB中,我们可以以两种不同的方式进行模式匹配:

  1. 使用$regex运算符进行模式匹配
  2. 不使用$regex运算符进行模式匹配

使用$regex运算符进行模式匹配

在MongoDB中,$regex运算符提供了在查询中进行模式匹配的功能。换句话说,regex运算符用于在文档中搜索特定的字符串。

注意:不允许在regex运算符内部使用$in运算符。

语法

{ <field>: { regex: /pattern/,options: '<options>' } }
{ <field>: { regex: 'pattern',options: '<options>' } }

$options:

下面的<option>可以与正则表达式一起使用:

  1. “i”字符用于在字符串中匹配大小写模式。
  2. ^$符号用于在文档中搜索特定模式。^符号用于确保字符串以特定字符开头,用于确保字符串以特定字符结尾。
  3. “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",
                     }
}

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程