赞
踩
mongodb的模糊查询需要熟练掌握 正则匹配($regex),和全文检索($text),或者直接使用正则表达式。
1.{field:{$regex:{/pattern/option}}},其中pattern是寻常的正则表达式,
option的值包含:
i(不区分大小写),
m(当使用^与$符号模糊匹配时,作用于屏蔽中间的换行符) ,
x(忽略注释,以#开头 /n结尾),
s(允许所有字符包括换行符参与模糊匹配)
2.{field:{$regex:{'pattern',$options:<options>}}}
3.{field:{$regex:{/pattern/,$options:<options>}}}
注意点:
当需要的option的值需要多个的时候,一定要选择2或3的写法,多设置一个key
mongodb支持直接使用正则表达式进行匹配:
{field:/pattern/options},
目前正则匹配只有匹配前缀^是走索引的。
全文搜索是 mongodb的一个特性,上述的正则表达是在效率上等同在该字段上进行全部扫描(除了在该字段上建立索引并使用^符号进行查找,该操作是会走索引的),当需要正则搜索的文档到了一定的量级,模糊是查询的效率还是会很低的。
全文搜索就是在需要搜索的字段上加上一个文本索引,注意:一个集合只能支持建立一个全文索引,但该索引可以包含多个字段做联合索引。
该索引支持字段的值为string或者string类型的array,
全文索引是在该字段值的每个单词上建立索引,全文索引需要提供词库,目前中文的词库需要第三方支持,企业版需要付费去申请Linsence。
使用步骤:
1.建立文本索引,db.collection.createIndex({field:"text"})
2.db.collection.find({$text:{$search:"value"}})
3.$text: 配合的操作符为
$search 查找的文本,
$language 指定的语言,
$caseSensitive (禁用或启用大小写敏感的搜索,默认关闭),
$diacriticSensitive(禁用或启用发音符号敏感的搜索,默认关闭)
注意点:
1.不能使用 $nor 进行全文检索
2.$or中需要全文检索,$or中的条件必须都是索引
3.带有$text的query均不能进行hit()强制走索引
4.可以指定$natural 自然排序的顺序,如果该查询包括全文搜索
5. 不能随意与其它操作 做联合查询
6.不支持视图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。