前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongodb 字符串查找匹配中$regex的用法

mongodb 字符串查找匹配中$regex的用法

作者头像
庞小明
发布2018-12-10 09:48:44
6K0
发布2018-12-10 09:48:44
举报
文章被收录于专栏:pangguomingpangguoming

官网地址:https://docs.mongodb.com/manual/reference/operator/query/regex/#regex-case-insensitive

举个例子来说:现在有以下集合(官网的例子):

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." } { "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" } { "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" } { "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" } db.collection.find( { sku: /adC/i } );等效于下面这种写法 db.collection.find( { sku: { $regex: 'abC', $options: 'i' } } ); 以上是个简单的应用。

参数介绍: Option ===== Description 参数 i ====== 加了这个参数,表示不区分大小写

参数 m ===== 个人理解这个参数是用来匹配value中有换行符(\n)的情形。 还有一个情形是:匹配规则中使用了锚,所谓的锚就是^ 开头, $ 结束 比如:db.products.find( { description: { $regex: /^S/, $options: 'm' } } ) 上面匹配规则的意思就是匹配description字段的value值中,以大写S开头的value值。 匹配后结果是:

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." } { "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" } 可以看出,第二条记录中descriptio的值包含\n换行字符,而他之所以能匹配出来就是因为 添加了m 参数。 假设没有添加m参数,语句就是

db.products.find( { description: { $regex: /^S/} } 此时匹配结果为

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." } 再比如我们连锚都不写也就是去掉^符合,语句变成

db.products.find( { description: { $regex: /S/ } } ) 此时结果为:

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." } { "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" } 此时可以分析出m参数的使用场景: 应该是为了匹配字段value值中以某个字符开头(^),或者是某个字符结束($).即便value中包含换行符(\n)也能匹配到。 从上例最后例子看出,m参数应该是和锚同时使用才有意思,否则直接去匹配也能匹配出来。说明m是在特殊需求下才使用的!

参数 s ===== 允许点字符(.)匹配所有的字符,包括换行符。

比如语句:

db.products.find( { description: { $regex: /m.*line/, $options: 'si' } } ) 匹配value中包含m且之后为任意字符包括换行符并且还包含line字符的字符串。不区分大小写 结果为:

{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" } { "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" } 如果不加s参数时,语句为:

db.products.find( { description: { $regex: /m.*line/, $options: 'i' } } ) 结果为:

{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" } 参数 x ====== 官网的大意是忽视空白字符。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档