MongoDB正则表达式概述
正则表达式是用来匹配字符串的一种方式。在 MongoDB 中,正则表达式可以用来做字符串的匹配查询。
在 MongoDB 中,正则表达式的语法跟 Javascript 中的正则表达式语法基本相同,它们都是采用斜杠(/)包围正则表达式模式,并用可选的标记来修饰模式。
下面是 MongoDB 正则表达式的语法:
/pattern/modifiers
上面的斜杠之间是正则表达式模式(也称为正则表达式字符串),modifiers 是可选的修饰符。
例如,下面这个正则表达式会匹配所有带有字母 a 的字符串:
/a/
下面是一些 MongoDB 正则表达式的修饰符:
修饰符 | 描述 |
---|---|
i | 大小写不敏感匹配 |
m | 多行匹配 |
g | 全局匹配 |
s | 单行匹配 |
MongoDB 正则表达式的运算符
MongoDB 中支持两个正则表达式查询运算符:
1. $regex 运算符
$regex 运算符用来进行正则表达式查询。
下面是 $regex 运算符的语法:
{ field: { $regex: /pattern/modifiers } }
例如,下面这个查询会匹配所有名字中包含字母 a 的文档:
db.users.find({ name: { $regex: /a/ } })
2. $options 运算符
$options 运算符用来为 $regex 运算符的修饰符提供值。
下面是 $options 运算符的语法:
{ field: { $regex: /pattern/, $options: '
例如,下面这个查询会匹配所有名字中包含字母 a 的文档,而且大小写不敏感:
db.users.find({ name: { $regex: /a/, $options: 'i' } })
MongoDB 正则表达式代码实例
下面是一些 MongoDB 正则表达式的示例:
1. 匹配以字母 a 开头的字符串
db.users.find({ name: { $regex: /^a/ } })
2. 匹配以字母 a 结尾的字符串
db.users.find({ name: { $regex: /a$/ } })
3. 匹配包含字母 a 的字符串
db.users.find({ name: { $regex: /a/ } })
4. 匹配大小写不敏感的字符串
db.users.find({ name: { $regex: /a/, $options: 'i' } })
5. 匹配一个字符集合
db.users.find({ name: { $regex: /[aeiou]/ } })
6. 匹配一个字符范围
db.users.find({ age: { $regex: /[3-7]/ } })
MongoDB 正则表达式的实例
下面是一个完整的 MongoDB 正则表达式实例,它可以在 Node.js 环境下运行。
首先,我们需要安装 MongoDB 的 Node.js 驱动程序:
npm install mongodb --save
然后,我们可以连接到 MongoDB 数据库并执行正则表达式查询:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'test';
MongoClient.connect(url, (err, client) => {
const collection = client.db(dbName).collection('users');
collection.find({ name: { $regex: /^a/ } }).toArray((err, docs) => {
console.log(docs);
client.close();
});
});
上面的代码会打印出所有名字以字母 a 开头的文档。