鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 正則表達(dá)式
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫(kù)
映射
查詢(xún)文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類(lèi)型
高級(jí)索引
索引
優(yōu)勢(shì)
記錄排序
查詢(xún)分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫(kù)引用
覆蓋索引查詢(xún)
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫(kù)
固定集合
關(guān)系
聚合
自動(dòng)增長(zhǎng)
復(fù)制
限制記錄
部署
分片
正則表達(dá)式
原子操作

正則表達(dá)式

正則表達(dá)式在所有語(yǔ)言當(dāng)中都是經(jīng)常會(huì)用到的一個(gè)功能,可以用來(lái)搜索模式或字符串中的單詞。MongoDB 也提供了這一功能,使用 $regex 運(yùn)算符來(lái)匹配字符串模式。MongoDB 使用 PCRE(可兼容 Perl 的正則表達(dá)式)作為正則表達(dá)式語(yǔ)言。

與文本搜索不同,使用正則表達(dá)式不需要使用任何配置或命令。

假如 posts 集合有下面這個(gè)文檔,它包含著帖子文本及其標(biāo)簽。

{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}

使用正則表達(dá)式

使用下列正則表達(dá)式來(lái)搜索包含 tutorialspoint 的所有帖子。

>db.posts.find({post_text:{$regex:"tutorialspoint"}})

同樣的查詢(xún)也可以寫(xiě)作下列形式:

>db.posts.find({post_text:/tutorialspoint/})

使用不區(qū)分大小寫(xiě)的正則表達(dá)式

要想使搜索不區(qū)分大小寫(xiě),使用 $options 參數(shù)和值 $i。下列命令將搜索包含 “tutorialspoint” 的字符串,不區(qū)分大小寫(xiě)。

>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})

該查詢(xún)返回的一個(gè)結(jié)果文檔中含有不同大小寫(xiě)的 “tutorialspoint” 文本。

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on TutorialsPoint", 
   "tags" : [ "tutorialspoint" ]
} 

使用正則表達(dá)式來(lái)處理數(shù)組元素

我們還可以在數(shù)組字段上使用正則表達(dá)式。在實(shí)現(xiàn)標(biāo)簽的功能時(shí),這尤為重要。假如想搜索標(biāo)簽以 “tutorial” 開(kāi)始(tutorial、tutorials、tutorialpoint 或 tutorialphp)的帖子,可以使用下列代碼:

>db.posts.find({tags:{$regex:"tutorial"}})

優(yōu)化正則表達(dá)式查詢(xún)

  • 如果文檔字段已經(jīng)設(shè)置了索引,查詢(xún)將使用索引值來(lái)匹配正則表達(dá)式,從而使查詢(xún)效率相對(duì)于掃描整個(gè)集合的正則表達(dá)式而言大大提高。
  • 如果正則表達(dá)式為前綴表達(dá)式,所有的匹配結(jié)果都要在前面帶有特殊的前綴字符串。比如,如果正則表達(dá)式為 ^tut,那么查詢(xún)將搜索所有以 tut 開(kāi)始的字符串。
上一篇:固定集合下一篇:ObjectId