MongoDB模糊查詢


模糊查詢簡介
MongoDB查詢條件可以使用正則表達式,從而實現模糊查詢的功能。模糊查詢可以使用$regex操作符或直接使用正則表達式對象。

MySQL  MongoDB
select * from student where name like ’%joe%’ db.student.find({name:{$regex:/joe/}})
select * from student where name regexp ’joe’ db.student.find({name:/joe/})

 

$regex操作符的介紹

MongoDB使用$regex操作符來設置匹配字符串的正則表達式,使用PCRE(Pert Compatible Regular Expression)作為正則表達式語言。

  1. regex操作符
  • {<field>:{$regex:/pattern/,$options:’<options>’}}
  • {<field>:{$regex:’pattern’,$options:’<options>’}}
  • {<field>:{$regex:/pattern/<options>}}
  1. 正則表達式對象
  • {<field>: /pattern/<options>}$regex與正則表達式對象的區別:
    在$in操作符中只能使用正則表達式對象,例如:{name:{$in:[/^joe/i,/^jack/}}
    在使用隱式的$and操作符中,只能使用$regex,例如:{name:{$regex:/^jo/i, $nin:['john']}}
    當option選項中包含X或S選項時,只能使用$regex,例如:{name:{$regex:/m.*line/,$options:"si"}}

 

$regex操作符的使用

$regex操作符中的option選項可以改變正則匹配的默認行為,它包括i, m, x以及S四個選項,其含義如下

  • i 忽略大小寫,{<field>{$regex/pattern/i}},設置i選項后,模式中的字母會進行大小寫不敏感匹配。
  • m 多行匹配模式,{<field>{$regex/pattern/,$options:'m'},m選項會更改^和$元字符的默認行為,分別使用與行的開頭和結尾匹配,而不是與輸入字符串的開頭和結尾匹配。
  • x 忽略非轉義的空白字符,{<field>:{$regex:/pattern/,$options:'m'},設置x選項后,正則表達式中的非轉義的空白字符將被忽略,同時井號(#)被解釋為注釋的開頭注,只能顯式位於option選項中。
  • s 單行匹配模式{<field>:{$regex:/pattern/,$options:'s'},設置s選項后,會改變模式中的點號(.)元字符的默認行為,它會匹配所有字符,包括換行符(\n),只能顯式位於option選項中。


使用$regex操作符時,需要注意下面幾個問題:

 

    • i,m,x,s可以組合使用,例如:{name:{$regex:/j*k/,$options:"si"}}
    • 在設置索弓}的字段上進行正則匹配可以提高查詢速度,而且當正則表達式使用的是前綴表達式時,查詢速度會進一步提高,例如:{name:{$regex: /^joe/}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM