本文演示如何使用 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 模式速查
| 模式 | 含义 | 示例匹配 |
|---|---|---|
^[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" |