MongoDB 正则表达式 ($regex)

2024 年 9 月 6 日 | 阅读 4 分钟

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

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

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

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

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

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

语法

$选项

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

  1. 字符“i”用于匹配字符串中的小写和大写模式。
  2. 字符“^”和“$”用于在文档中搜索特定的模式。 符号“^”用于确保字符串以某个字符开头,而符号“$”用于确保字符串以某个字符结尾。
  3. 字符“x”用于忽略字符串中的所有空格字符。

示例

在下面的示例中,我们将使用

>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 的学生的详细信息,因此我们使用 $regex 运算符(即 {$regex : "btech"})为 find() 方法中的课程字段传递一个正则表达式。

注意:使用 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”开头的学生的详细信息。

注意:使用 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 的学生的详细信息。

注意:使用 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 运算符的情况下进行模式匹配。 在此方法中,它使用正则表达式对象。

语法

示例 4: 使用正则表达式对象显示姓名中包含“ck”的学生的详细信息。

“//”表示在这些分隔符中指定您的搜索条件。 因此,我们正在寻找姓名中带有“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",
                     }
}