mongodb 之 模糊查询

来源:互联网 发布:手机淘宝能实名认证吗 编辑:程序博客网 时间:2024/06/06 13:57

mongodb的模糊查询需要熟练掌握 正则匹配($regex),和全文检索($text),或者直接使用正则表达式。

一.mongodb中正则($regex)的用法:

      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的全文搜索:

   全文搜索是 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.不支持视图

  

原创粉丝点击