MongoDB:20-MongoDB- 正则表达式

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB:20-MongoDB- 正则表达式


  1. 正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
  2. 许多程序设计语言都支持利用正则表达式进行字符串操作。
  3. MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。
  4. MongoDB使用PCRE (Perl Compatible Regular Expression) 作为正则表达式语言。
  5. 不同于全文检索,我们使用正则表达式不需要做任何配置。


使用正则表达式


  • 演示数据:
  1. /* 1 */
  2. {
  3.    "_id" : ObjectId("59efd2ed2931dbc1733a94e0"),
  4.    "address" : {
  5.        "province" : "HeNan",
  6.        "city" : "ZhengZhou",
  7.        "pincode" : "123"
  8.    },
  9.    "tags" : [
  10.        "music",
  11.        "cricket",
  12.        "blogs"
  13.    ],
  14.    "name" : "fly"
  15. }
  16. /* 2 */
  17. {
  18.    "_id" : ObjectId("59efd2ed2931dbc1733a94e1"),
  19.    "address" : {
  20.        "province" : "HeBei",
  21.        "city" : "HanDan",
  22.        "pincode" : "234"
  23.    },
  24.    "tags" : [
  25.        "music",
  26.        "basket",
  27.        "blogs"
  28.    ],
  29.    "name" : "chen"
  30. }
  31. /* 3 */
  32. {
  33.    "_id" : ObjectId("59efd2ed2931dbc1733a94e2"),
  34.    "address" : {
  35.        "province" : "ChongQing",
  36.        "city" : "ChongQing",
  37.        "pincode" : "456"
  38.    },
  39.    "tags" : [
  40.        "music",
  41.        "writing",
  42.        "running"
  43.    ],
  44.    "name" : "wang"
  45. }


  • 查找name包含 f字符串的用户:


  1. db.user.find({name:{$regex:"f"}})


  • 以上查询也可以写为:


  1. db.user.find({name:/f/})


  • 查找name包含 f字符串的用户,忽略大小写:


  1. db.user.find({name:{$regex:"F", $options: 'i'}})
  2. 或者
  3. db.user.find({name:/F/i})


正则可选项


  • mongodb和其他语言标准正则稍有不同,有自己的标准。
  1. $options的可选值
  2. i 忽略大小写;
  3. m 多行查找,如果内容里面不存在换行符号(例如 \n)或者构造上没有(start/end),该选项没有任何效果;
  4. x 【忽视空吧字符串】空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两头,也都被忽略;
  5. s 圆点元字符(.)匹配所有的字符,包括换行符


数组元素使用正则表达式


  • 我们还可以在数组字段中使用正则表达式来查找内容。
  1. db.user.find({tags:{$regex:"basket"}})


优化正则表达式查询


  1. 如果你的文档中字段设置了索引,那么使用索引相比于正则表达式匹配查找所有的数据查询速度更快。
  2. 如果正则表达式是前缀表达式,所有匹配的数据将以指定的前缀字符串为开始。例如: 如果正则表达式为 ^F ,查询语句将查找以 F为开头的字符串。
  3. db.user.find({name:{$regex:"^F", $options: 'i'}})


正则表达式中使用变量


  • 正则表达式中使用变量。一定要使用eval将组合的字符串进行转换,不能直接将字符串拼接后传入给表达式。否则没有报错信息,只是结果为空!实例如下:
  1. var name=eval("/" + 变量值key +"/i");
  • 以下是模糊查询包含f关键词, 且不区分大小写:
  1. name:eval("/"+f+"/i")    // 等同于 title:{$regex:f,$Option:"$i"}  

使用正则表达式的更新操作:

  1. db.user.update( { name:/F/i}, { $set: { 'site':'http://blog.csdn.net/fly910905' } } , false, true)
  • 参数有顺序,false是upsert,如果没有就插入新的。true就是multi多条记录更新,所有匹配到的结果。或者直接指定{ multi: true }:
  1. db.user.update( { name:/Q/i}, { $set: { 'site':'http://blog.csdn.net/fly910905' } }  , { multi: true })
  2. db.collection.update(criteria,objNew,upsert,multi)
  3. 参数说明:
  4. criteria:用于设置查询条件的对象(必填)({},表示更新所有)
  5. objNew:用于设置更新内容的对象(必填)
  6. upsert:如果记录已经存在,更新它,否则新增一个记录,取值为01[true为插入,默认是false,不插入]
  7. multi:如果有多个符合条件的记录,是否全部更新,取值为01[mongodb 默认是false,只更新找到的第一条记录]
  8. 注意:默认情况下,只会更新第一个符合条件的记录
  9. 一般情况下后两个参数分别为0,1 ,即:
  10. db.collection.update(criteria,objNew,0,1)


使用正则表达式的替换操作:


  1. db.user.find().forEach(
  2. function(u) {
  3.      u.site= u.site.replace(/\./, "-");
  4.      db.user.save(u);
  5.    }
  6. );


参考来源: http://www.runoob.com/mongodb/mongodb-regular-expression.html

参考来源http://www.jb51.net/article/73958.htm


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
4月前
|
数据采集 监控 NoSQL
MongoDB 正则表达式详解:高效数据查询与处理技巧
MongoDB 正则表达式详解:高效数据查询与处理技巧
|
5月前
|
Python
Python 内置正则表达式库re的使用
正则表达式是记录文本规则的代码,用于查找和处理符合特定规则的字符串。在Python中,常通过原生字符串`r'string'`表示。使用`re.compile()`创建正则对象,便于多次使用。匹配字符串有`match()`(从开头匹配)、`search()`(搜索首个匹配)和`findall()`(找所有匹配)。替换字符串用`sub()`,分割字符串则用`split()`。
61 3
|
4月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
41 2
|
4月前
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
|
4月前
|
安全 算法 Python
Python高级语法与正则表达式(一)
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。
|
4月前
|
Python
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。
|
4月前
|
Python
Python中re模块的正则表达式
【6月更文挑战第2天】了解Python的re模块,它是处理正则表达式的核心工具。正则表达式用于在文本中查找特定模式。本文讨论了re模块的用法和技巧,包括导入模块、匹配、分组、替换文本、编译正则表达式以及使用预定义字符类、量词、锚点等高级功能。通过实例展示了如何在Python中执行这些操作,帮助提升文本处理能力。掌握这些技巧将使你更有效地利用正则表达式解决字符串处理问题。
37 2
|
4月前
|
Python
Python正则表达式详解:掌握文本匹配的魔法
Python正则表达式详解:掌握文本匹配的魔法
下一篇
无影云桌面