Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

MongoDB 正则查询:查找前 5 个字符为大写的记录

本文演示如何使用 MongoDB 正则表达式 $regex 查找字符串字段中前 5 个字符均为大写字母的文档。

创建示例数据

> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"JOHN Smith"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7edef1a844af18acdffb2") }
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"SAM Williams"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7ee011a844af18acdffb3") }
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"CAROL Taylor"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7ee101a844af18acdffb4") }
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"Bob Taylor"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7ee351a844af18acdffb5") }
> db.upperCaseFiveLetterDemo.insertOne({"StudentFullName":"DAVID Miller"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd7ee451a844af18acdffb6") }

显示所有数据

> db.upperCaseFiveLetterDemo.find().pretty();
{ "_id" : ObjectId("5cd7edef1a844af18acdffb2"), "StudentFullName" : "JOHN Smith" }
{ "_id" : ObjectId("5cd7ee011a844af18acdffb3"), "StudentFullName" : "SAM Williams" }
{ "_id" : ObjectId("5cd7ee101a844af18acdffb4"), "StudentFullName" : "CAROL Taylor" }
{ "_id" : ObjectId("5cd7ee351a844af18acdffb5"), "StudentFullName" : "Bob Taylor" }
{ "_id" : ObjectId("5cd7ee451a844af18acdffb6"), "StudentFullName" : "DAVID Miller" }

统计前 5 字符全大写的文档数量

> db.upperCaseFiveLetterDemo.find({StudentFullName: {$regex: /[A-Z]{5}/ }}).count();
2

显示符合条件的文档

> db.upperCaseFiveLetterDemo.find({StudentFullName: {$regex: /[A-Z]{5}/ }});
{ "_id" : ObjectId("5cd7ee101a844af18acdffb4"), "StudentFullName" : "CAROL Taylor" }
{ "_id" : ObjectId("5cd7ee451a844af18acdffb6"), "StudentFullName" : "DAVID Miller" }

正则表达式解析

  • /[A-Z]{5}/ - 匹配连续 5 个大写字母
  • 注意:此正则匹配字符串任意位置连续 5 个大写字母,不一定是开头
  • "JOHN Smith" - 只有 4 个大写字母 (JOHN) → 不匹配
  • "CAROL Taylor" - 前 5 字符 CAROL 全大写 → 匹配
  • "DAVID Miller" - 前 5 字符 DAVID 全大写 → 匹配

更精确:锚定开头 ^

// 严格匹配:字符串开头连续 5 个大写字母
db.upperCaseFiveLetterDemo.find({StudentFullName: {$regex: /^[A-Z]{5}/ }});

Regex 选项

// 不区分大小写
db.col.find({ field: { $regex: "pattern", $options: "i" } });

// 多行模式
db.col.find({ field: { $regex: "^start", $options: "m" } });

// 扩展模式(忽略空白和注释)
db.col.find({ field: { $regex: "pattern", $options: "x" } });

常用 Regex 模式速查

性能提示

  • 以 ^ 开头的 Regex 可利用索引(Prefix Match)
  • 无锚点或以 .* 开头会全表扫描
  • 大量文本搜索建议使用 Text Index ($text/$search)
模式含义示例匹配
^[A-Z]{5}开头 5 个大写字母"HELLO world"
[A-Z]{5}$结尾 5 个大写字母"world HELLO"
^[A-Z]+开头一个或多个大写"HELLO", "A"
^[A-Z][a-z]+首字母大写,其余小写"Hello", "World"
^[A-Z][a-z]* [A-Z][a-z]*$First Last 格式"John Smith"