regex 开头_如何在MongoDB和Node.js中使用SQL Like和Regex搜索

56a544b458ba94527807d7784a8c5a8c.png

介绍:

在本文中,我们将了解如何使用Regex 像SQL Like语句一样在MongoDB中进行搜索

要从集合中选择文档,可以使用db.collection.find()方法。要选择集合中的所有文档,请将空文档作为查询过滤器文档传递给该方法。

在shell中,复制并粘贴以下内容以返回members集合中的所有文档。

要格式化结果,请将追加.pretty()到find操作:

db.members.find({}).pretty()

使用正则表达式搜索Word

现在,我们正在使用.find()查询集合的方法,我们可以稍稍修改语法,并开始基于单词或短语查找匹配项,这些单词或短语可能是给定字段中的部分匹配项,类似于SQL引擎的LIKE运算符。

诀窍是利用正则表达式(或简称regex),这基本上是定义搜索模式的文本字符串。有许多用稍微不同的语法编写的regex引擎,但是基本原理都相同,在这种情况下,MongoDB使用Perl Regex(PCRE)引擎。

MongoDB的Regex用法:

$regex :为查询中的模式匹配字符串提供正则表达式功能。

$options: 为正则表达式提供各种选项,常用选项举例:

i :大小写不敏感,以匹配大小写。

m描述模式匹配的位置,开始还是结束位置

x:“扩展”功能,可以忽略$regex模式中的所有空白字符,除非转义或包含在字符类中

s:允许 . 字符(即.)匹配所有字符,包括换行符

用法示例:

在最基本的级别上,正则表达式是在字符串的两边都用单斜杠(/)括起来的字符串。

例如,如果我们要使用正则表达式执行与上述相同的查询并找出多少members服务Neha,则可以将字符串“ Neha”替换为/ Neha /:

db.members.find( { name: /Neha/ } )

但是想象一下,我们想找到自治市镇以前三个字符“ Neha”开头的餐馆数量。我们将对正则表达式进行非常小的修改,如下所示:

db.members.find( { name: /^Neha/ } )

尖号字符(^)指定了我们字符串中应该作为开始的位置,因此,如果我们有一个文档,该三个字母位于字段的中间,则不会匹配。

这通知正则表达式引擎我们希望搜索不区分大小写,无论大小写都匹配。我们还在正则表达式右斜杠(/)之后添加了特殊的i标志:

db.members.find( { name: /Neha/i } )

在Node.JS中将变量regex与MongoDB结合使用

var search ='Neha';db.members.find(name: new RegExp(search)) //For substring search, case sensitive. db.members.find(name: new RegExp('^' + search + '$')) //For exact search, case sensitivedb.members.find(name: new RegExp(search, ‘i')) //For substring search, case insensitivedb.members.find(name: new RegExp('^' +search + '$', 'i')); //For exact search, case insensitive

常用表达式语法:

00bd4ad3e5b4f52880934c6b8313492c.png

如果发现任何不正确的地方,或者想分享有关上述主题的更多信息,欢迎反馈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值