MongoDB(课时14 正则运算)
3.2.4.9 正则运算
如果想实现模糊查询,必须使用正则表达式,而且正则表达式使用的语言是Perl兼容的正则表达式的形式。
要实现正则使用,则按照如下的定义格式:
- 基础语法:{key : 正则标记}
- 完整语法:{key : {"$regex" : 正则标记, "$options" : 选项}}
options主要是设置正则的信息查询标记:
- “i”:忽略字母大小写;
- “m”:多行查找;
- “x”:空白字符串除了被转义的或在字符类中以外的完全被忽略;如果内容里面不存在换行符号(例如 \n)或者构造上没有(start/end),该选项没有任何效果;
- “s”:匹配所有的字符(正则中圆点表示匹配任意字符,即“.”),包括换行内容。
对于 i 和 m 可以直接使用,而"x"和“s” 必须使用“$regex”。
范例:查询以“谷”开头的姓名
db.students.find({"name" : /谷/}).pretty()
注意:转义字符/谷/,不加双引号,即不能写成“/谷/”。
范例:查询姓名有字母A
db.students.find({"name" : /a/i}).pretty() # i表示不区分大小写
db.students.find({"name" : {"$regex" : /a/i}}).pretty()
db.students.find({"name" : {"$regex" : /a/, "$options" : "$i"}}).pretty()
要执行模糊查询的操作,严格来讲只需要编写一个关键字就够了。
正则操作中除了可以查询出单个字段的内容之外,也可以进行数组数据的查询。
范例:查询数组数据
db.students.find({"course" : /政/}).pretty()
db.students.find({"course" : /政?/}).pretty()
MongoDB中的正则符号和之前Java正则是有一些差别的,不建议使用以前的一些标记,正则就将其应用在模糊数据查询上。
优化正则表达式查询
- 如果你的文档中字段设置了索引,那么使用索引相比于正则表达式匹配查找所有的数据查询速度更快。
- 如果正则表达式是前缀表达式,所有匹配的数据将以指定的前缀字符串为开始。例如: 如果正则表达式为 ^tut ,查询语句将查找以 tut 为开头的字符串。
这里面使用正则表达式有两点需要注意:
正则表达式中使用变量。一定要使用eval将组合的字符串进行转换,不能直接将字符串拼接后传入给表达式。否则没有报错信息,只是结果为空!实例如下:
var name=eval("/" + 变量值key +"/i");
以下是模糊查询包含title关键词, 且不区分大小写:
title:eval("/"+title+"/i") // 等同于 title:{$regex:title,$Option:"$i"}
最新文章
- 一站式解决,Android 拍照 图库的各种问题.
- Linux (centos )下Nginx+PHP+MySQL配置——自己的lnmp配置
- 由pthread_create引起的段错误
- NovaMind *的安装、和谐破解到永久使用
- Maven使用总结
- HTML中将背景颜色渐变
- C# 编写服务 Windows service
- Activemq 宕机解决方案
- python学习之第三课时--基本数据类型及区别,变量
- Easyui 修改jquery validatebox为英文校验提示为中文提示
- jquery的jsonp的使用
- linux下的C++项目创建
- 20155323刘威良《网络对抗》Exp4 恶意代码分析
- Confluence 6 LDAP 连接池配置参数
- linux命令(29):用户组管理
- IOS贝塞尔曲线圆形进度条和加载动画
- java对象深入理解
- angular中的子路由用法
- ORACLE_TO_CHAR Function
- 【BZOJ】1666 [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
热门文章
- win10 java环境变量的正确配置
- PHP自定义函数返回多个值
- Postman使用js获取日期
- !! A股历史平均市盈率走势图
- BCB ERROR:[Linker Error] 'XXX.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
- Docker深入浅出1
- EditPlus 中文版停止更新
- 学号20155311 2016-2017-2 《Java程序设计》第9周学习总结
- centos 安装 jdk8和comcat8
- Core Java 2