写点什么

MongoDB 中的正则表达式

用户头像
Kylin
关注
发布于: 2021 年 03 月 22 日
MongoDB中的正则表达式

正则表达式是指预先定义好一个“字符串模板”,通过这个“字符串模板”可以匹配、查找和替换那些匹配“字符串模板”的字符串。


在 MongoDB 中,同样利用正则表达式能够灵活有效地匹配字符串。例如,想要查找所有“y”键值包含“one"或者"one"的用户,就可以使用正则表达式执行不区分大小写的匹配:

// 正则表达式标识(i)是代表不区分大小写所必需的。
> db.ecosystem.find({"y":/one/i}){ "_id" : ObjectId("6055444e63d8bae73fc0f507"), "x" : 2, "y" : "one" }{ "_id" : ObjectId("6055eff72ecb2add02bba094"), "x" : 11, "y" : "One" }>
复制代码


我们可以进一步使用正则表达式匹配出键值为 "y":"Onedata" 的记录。

> db.ecosystem.find({"y":/one?/i}){ "_id" : ObjectId("6055444e63d8bae73fc0f507"), "x" : 2, "y" : "one" }{ "_id" : ObjectId("6055eff72ecb2add02bba094"), "x" : 11, "y" : "One" }{ "_id" : ObjectId("6055f2f02ecb2add02bba095"), "x" : 12, "y" : "Onedata" }>
复制代码


MongoDB 使用 Perl 兼容的正则表达式(PCRE)库来匹配正则表达式,任何 PCRE 支持的正则表达式语法都能被 MongoDB 接受。


在查询中使用正则表达式前,可以现在 Javascript shell 中检查一下语法,确保匹配与设想的一致。


关于索引

MongoDB 可以为前缀型正则表达式(比如 /^one/)查询创建索引,所以这种类型的查询会非常高效。


补充

正则表达式是可以匹配出自身的。例如:

> // 先插入一条正则表达式自身的记录> db.ecosystem.insert({"x":13,"z":/count/})WriteResult({ "nInserted" : 1 })> >>> db.ecosystem.find(){ "_id" : ObjectId("6055443e63d8bae73fc0f506"), "x" : 1, "y" : null }{ "_id" : ObjectId("6055444e63d8bae73fc0f507"), "x" : 2, "y" : "one" }{ "_id" : ObjectId("6055445f63d8bae73fc0f508"), "x" : 4, "y" : "two" }{ "_id" : ObjectId("6055eff72ecb2add02bba094"), "x" : 11, "y" : "One" }{ "_id" : ObjectId("6055f2f02ecb2add02bba095"), "x" : 12, "y" : "Onedata" }{ "_id" : ObjectId("6055f4de2ecb2add02bba096"), "x" : 13, "z" : /count/ }>>>>// 通过正则表达式匹配自身的方式进行查询>> db.ecosystem.find({"z":/count/}){ "_id" : ObjectId("6055f4de2ecb2add02bba096"), "x" : 13, "z" : /count/ }>
复制代码


用户头像

Kylin

关注

现实的理想主义者 2019.10.08 加入

【坐标】:魔都 【品种】:程序媛 【标签】:技术宅、大吃货 【追求】:改变世界、改变自己 【信条】:每次前进一小步

评论

发布
暂无评论
MongoDB中的正则表达式