1. 程式人生 > >mongodb 之 模糊查詢

mongodb 之 模糊查詢

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.不支援檢視