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
目录
相关文章
|
2月前
|
自然语言处理 NoSQL MongoDB
MongoDB 正则表达式
10月更文挑战第23天
42 2
|
7月前
|
数据采集 监控 NoSQL
MongoDB 正则表达式详解:高效数据查询与处理技巧
MongoDB 正则表达式详解:高效数据查询与处理技巧
174 0
|
3月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
4月前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
1月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
75 15
|
1月前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
3月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。