相信大家在寫程式碼的時候,一定都會用到if/else根據不同的條件,執行不同的程式碼,有時候如果條件多一點的話,還會使用switch。
但你能相信在MongoDB資料庫的搜尋語法也使用if/else,至少剛開始接觸aggregate的我是不相信拉,直到某一次為了一個需求,我用$bucket
、$facet
寫了一段很長的pipeline程式碼,還無法達到我想要的結果,向主管求助才發現有這麼好用的語法。
首先我們先介紹$cond
這個操作符,它跟我們熟悉的if/else用法很類似,寫法有兩種格式。
其中<boolean-expression>
代表判斷的條件,會根據這裡的結果是true或false決定要回傳的值是<true-case>
還是<false-case>
。
例如:商店的會員等級制度是,每年消費一定要滿3000元,才是高級會員,否則是一般會員,原本的會員資料如下
此時我們可以透過以下指令來判斷,每一個人的會員等級
或是用以下寫法,也會得到相同的資料
個人比較偏好第一種寫法,雖然在寫法上第二種方法比較簡潔,但是在閱讀上第一種方式比較好懂,尤其是對從來沒有接觸過$cond
這個操作符的人,也能大概猜出這段程式碼在做什麼。
第二個要介紹的操作符是$switch
,它可以根據不同條件,回傳不同的值。
例如:現在商店的會員等級制度,區分成只要註冊就是一般會員,每年消費1000元以上就是高級會員,消費3000元以上是VIP會員。
此時我們可以透過以下指令來判斷,每一個人的會員等級
ps.前面有提到$bucket
、$facet
這兩個操作符,明後天會介紹。