{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }
在mongodb中你也可以使用正则表达式对象(/parttern/)来匹配
{ <field>: /pattern/<options> }
二、$options选项,一下的<options>选项是适合正则表达式的
Option
|
Description
|
Syntax Restrictions
|
i
|
Case insensitivity to match upper and lower cases. For an example, see
Perform Case-Insensitive Regular Expression Match
.
|
|
m
|
For patterns that include anchors (i.e.
^
for the start,
$
for the end), match at the beginning or end of each line for strings with multiline values. Without this option, these anchors match at beginning or end of the string. For an example, see
Multiline Match for Lines Starting with Specified Pattern
.
If the pattern contains no anchors or if the string value has no newline characters (e.g.
\n
), the
m
option has no effect.
|
|
x
|
“Extended” capability to ignore all white space characters in the
$regex
pattern unless escaped or included in a character class.
Additionally, it ignores characters in-between and including an un-escaped hash/pound (
#
) character and the next new line, so that you may include comments in complicated patterns. This only applies to data characters; white space characters may never appear within special character sequences in a pattern.
The
x
option does not affect the handling of the VT character (i.e. code 11).
|
Requires
$regex
with
$options
syntax
|
s
|
Allows the dot character (i.e.
.
) to match all characters
including
newline characters. For an example, see
Use the . Dot Character to Match New Line
.
|
Requires
$regex
with
$options
syntax
|
三、规则 $regex vs. /pattern/ Syntax
在一个$in的查询表达式中使用正则表达式,你只能使用JavaScript正则表达式(i.e. /pattern/ ),如下:
{ name: { $in: [ /^acme/i, /^ack/ ] } }
你不可以使用$regex操作符正则表达式在$in查询条件中:
隐含的字段条件
在一个逗号分隔的查询条件列表中包含正则表达式,使用$regex操作符:
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } }
{ name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } }
{ name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
为了使用x选项和s选项你必须使用$regex操作符表达式和$options操作符表达式,例如:指定i和s选项,你必须同时使用$options选项;
{ name: { $regex: /acme.*corp/, $options: "si" } }
{ name: { $regex: 'acme.*corp', $options: "si" } }
四、PCRE(Perl compatible regular Expression) vs Javascript
使用PCRE支持的正则表达式特性不支持用在Javascript中,你必须使用$regex操作符以字符串的形式,例如:使用(?i)在这种模式中对其它模式进行大小写忽略和(?-i)为了剩余模式的大小写灵敏度,你必须以字符串使用$regex操作符;
{ name: { $regex: '(?i)a(?-i)cme' } }
四、对于区分大小写的正则表达式查询,如果字段存在索引,然后mongodb匹配正则表达式中对应索引的值,他可以比集合扫描更快,如果这个正则表达式是一个前缀正则表达式有进一步优化的空间,这就意味着所有潜在匹配都以相同的字符串开始;
如果开始以插入符号(^)或以一个左锚(\A)这样的正则表达式是一个前缀表达式;接着是一串简单的字符串,例如:正则表达式/^abc.*/将通过匹配优化只针对以abc开始的索引值;
此外, /^a/, /^a.*/, and /^a.*$/匹配等价的字符串,他们具有不同的性能特征,如果适当的索引存在,所有这些表达式都使用索引; however, /^a.*/, and /^a.*$/ are slower. /^a/ can stop scanning after matching the prefix.
不区分大小写的正则表达式查询一般不能有效地使用索引。$regex操作符实现不符合排序规则,无法利用不区分大小写的索引。
如下的products集合文档使用如下的:
{ "_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" }
演示一个LIKE匹配
如下的例子匹配所有文档中sku字段"%789"
db.products.find( { sku: { $regex: /789$/ } } )
该示例类似于以下类似SQL语句:
SELECT * FROM products
WHERE sku like "%789";
演示忽略大小写正则表达式匹配:
如下的例子演示了一个试用选项i忽略文档中sku字段的大小写匹配并且以ABC开头;
db.products.find( { sku: { $regex: /^ABC/i } } )
查询匹配的结果是:
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
下面的例子使用选项m匹配字母多行以S开头的字符串:
db.products.find( { description: { $regex: /^S/, $options: 'm' } } )
查询的结果是:
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
不用m选项查询的结果将是如下:
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
如果$regex不包含任何锚点,模式作为字符串进行整体匹配,如下面的示例所示:
db.products.find( { description: { $regex: /S/ } } )
然后,$regex将会匹配如下文档:
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
regex
操作符
的介绍
MongoDB
使用$
regex
操作符
来设置匹配字符串的
正则表达式
,使用
PCRE
(Pert Compatible Regular Expression)作为
正则表达式
语言。
regex
操作符
{<field>:{$
regex
:/pattern/,$options:’<options>’}}{<field>:{$
regex
:’pattern’,$o...
正则表达式
是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。许多程序设计语言都支持利用
正则表达式
进行字符串操作。
MongoDB
使用
操作符
来设置匹配字符串的
正则表达式
。
MongoDB
使用
PCRE
(Perl Compatible Regular Expression) 作为
正则表达式
语言。不同于全文检索,咱们使用
正则表达式
不需要做任何配置。考虑以下。
{ < field >: { $
regex
: / pattern / , $ options : ‘’ } }
{ < field >: { $
regex
: ‘pattern’ , $ optio...
正则表达式
常用来在所有语言中搜索字符串的任何模式或文字。
MongoDB
还提供了
正则表达式
功能的字符串模式使用
正则表达式
$
regex
操作符
。
MongoDB
使用
PCRE
(Perl兼容
正则表达式
)为
正则表达式
语言。
不同于文本搜索,我们不需要做任何配置或命令就能直接使用
正则表达式
。
考虑下包含文字后其标签的帖子集合,文档结构如以下:
"post_text": "enjoy the
mongodb
articles on yiibai",
"tags": [
"
mongodb
",
"yiibai"
使用
正则表达式
表达
下面的
正则表达式
查询搜索所有包含字符串 yiibai.
官网地址:https://docs.
mongodb
.com/manual/reference/operator/query/
regex
/#
regex
-case-insensitive举个例子来说:现在有以下集合(官网的例子):{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" :
举个例子来说:现在有以下集合(官网的例子):
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "s
正则表达式
在所有的编程语言中经常使用,用于以搜索任何字符串中的模式或单词。
MongoDB
还提供使用$
regex
运算符的字符串模式匹配的
正则表达式
的功能。
MongoDB
使用
PCRE
(Perl兼容
正则表达式
)作为
正则表达式
语言。与文本搜索不同,不需要使用任何配置或命令来使用
正则表达式
。请考虑以下文档结构,其中包含post文本及其标签 -{"post_text": "enjoy the mongod...
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB
的聚合管道将
MongoDB
文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用
MongoDB
的标准查
克隆回购。
确保
mongodb
正在运行。
编辑 app.js 文件并更改: 3.1 MONGO_DB 到
mongoDB
名称 3.2 MONGO_COLLECTION 到
mongoDB
集合,我们要在 find 命令中搜索 3.3 title到要搜索的文档的键/字段。 例如。 我想在我的文档中搜索title字段(字符串)。
运行npm install
运行node app.js
现在它应该在
正则表达式
是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
MongoDB
使用
操作符
来设置匹配字符串的
正则表达式
。
MongoDB
使用
PCRE
(Perl Compatible Regular Expression) 作为
正则表达式
语言。不同于全文检索,我们使用
正则表达式
不需要做任何配置。
http://stackoverflow.com/questions/8107102/
mongodb
-regular-expression-with-indexed-field
I was creating my first app using
MongoDB
. Created index for a field, and tried a find query with $r
select * from member where name like '%XXX%'
在
mongodb
中:
db.member.find({"name":{ $
regex
:/XXX/ }})
二、查询以某字段为开头的文档
db.member.find({"name":{$
regex
:/^XXX/}})
三、查...
Python操作
MongoDB
MongoDB
是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python 3下
MongoDB
的存储操作。
1. 准备工作
在开始之前,请确保已经安装好了
MongoDB
并启动了其服务,并且安装好了Python的PyMon...