被MongoDB用Aggregate暴打的後端小菜雞日記-day21-文字操作符

鰻魚燒
Sep 21, 2022

--

文字操作符其實有很多種類可以講,像是大小寫轉換、找特定字在文字中的位置、將字串合併等等,就讓我們一一做舉例。

Photo by Andreas Fickl on Unsplash

首先假設我們有一些商品資料

如果我們要針對商品名稱,進行大小寫的轉換,這時候可以使用$toUpper$toLower這兩個操作符。

這樣轉換有一個好處是,當我們再寫商品搜尋功能給顧客使用時,通常會自動幫顧客轉換大小寫,這樣容易使用關鍵字搜尋到更多的商品,實際寫法如下。

ps.必須注意的是,除了商品名稱要換成小寫以外,關鍵字也要透過toLowerCase()(JS語法)轉換成小寫,這樣經過$match的比對才會是相同的。

另外提一下,其實有一個操作符$regexFind,可以讓使用者用正規表達搜尋文字資料,不過因為本人對正規表達式不太熟練,因此就不多做介紹了。

接下來用兩個文字,來示範如何用$concat將兩個文字合併再一起,以及使用$indexOfBytes找尋找特定字母,在文字中的位置。

其中$indexOfBytes的用法,跟之前在陣列操作符有介紹到的$indexOfArray很像,都是後面接一個陣列,依序帶入文字、搜尋的關鍵字、開始搜尋的位置、結束搜尋的位置,最後會傳一個數值,如果是-1代表搜尋不到,如果是其它數值,就代表是關鍵字所在的位置。

最後要來介紹一下$literal這個操作符,它的用途有點特別,可以讓特定字串不進行解析,避免文字中某些關鍵字被MongoDB當成指令或變數。

不曉得大家有沒有發現,MongoDB通常都會用$來區分是變數,還是一般的文字,這時候如果你剛好想寫金錢的符號$,後面接數字代表商品價格,如果沒有特別使用$literal,就有可能會出錯。

假設現在商品因為在美國販賣,所以以美金計價,資料如下(因為舉例方便都是賣56美金)

如果我們想確認商品是不是賣56美金,可以用以下指令

ps.如果對文字操作符有興趣的話,可以參考官方文件,有更詳細的說明

--

--

鰻魚燒

剛轉職成後端工程師的小菜雞,分享自己的學習筆記