mongodb 字符串查找匹配中$regex的用法


官網地址:https://docs.mongodb.com/manual/reference/operator/query/regex/#regex-case-insensitive

舉個例子來說:現在有以下集合(官網的例子):

{ "_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" }

db.collection.find( { sku: /adC/i } );等效於下面這種寫法
db.collection.find( { sku: { $regex: 'abC', $options: 'i' } } );
以上是個簡單的應用。

參數介紹:
Option ===== Description
參數 i ====== 加了這個參數,表示不區分大小寫

參數 m ===== 個人理解這個參數是用來匹配value中有換行符(\n)的情形。
還有一個情形是:匹配規則中使用了錨,所謂的錨就是^ 開頭, $ 結束
比如:db.products.find( { description: { $regex: /^S/, $options: 'm' } } )
上面匹配規則的意思就是匹配description字段的value值中,以大寫S開頭的value值。
匹配后結果是:

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }

可以看出,第二條記錄中descriptio的值包含\n換行字符,而他之所以能匹配出來就是因為
添加了m 參數。
假設沒有添加m參數,語句就是

db.products.find( { description: { $regex: /^S/} }

此時匹配結果為

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }

再比如我們連錨都不寫也就是去掉^符合,語句變成

db.products.find( { description: { $regex: /S/ } } )

此時結果為:

{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }

此時可以分析出m參數的使用場景:
應該是為了匹配字段value值中以某個字符開頭(^),或者是某個字符結束($).即便value中包含換行符(\n)也能匹配到。
從上例最后例子看出,m參數應該是和錨同時使用才有意思,否則直接去匹配也能匹配出來。說明m是在特殊需求下才使用的!

參數 s ===== 允許點字符(.)匹配所有的字符,包括換行符。

比如語句:

db.products.find( { description: { $regex: /m.*line/, $options: 'si' } } )

匹配value中包含m且之后為任意字符包括換行符並且還包含line字符的字符串。不區分大小寫
結果為:

{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }

如果不加s參數時,語句為:

db.products.find( { description: { $regex: /m.*line/, $options: 'i' } } )

結果為:

{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" }

參數 x ====== 官網的大意是忽視空白字符。
---------------------
作者:山鬼謠me
來源:CSDN
原文:https://blog.csdn.net/u013066244/article/details/51491556
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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