被MongoDB用Aggregate暴打的後端小菜雞日記-day11- 用$sample、$rand隨機取得資料

鰻魚燒
Sep 10, 2022

--

前面十天介紹不少aggregate用法,以簡單的小型專案來說,這些操作符基本上都夠用,熟練之後如果有接到其他特別的需求,其實自己再去MongoDB官網上找其他的操作符使用,不會有太大的問題,官網很貼心附上語法的範例,以及處理前後的資料。

因此接下來介紹的操作符,都比較進階或是比較冷門一點,大家可以參考看看,搞不好在未來的某一天會用到。

Photo by Kenny Eliason on Unsplash

首先介紹$sample,它可以讓我們從眾多的資料當中,隨機選出幾筆資料出來,這個很適合用在當你資料庫的資料很多,即使經過$macth篩選過讓資料筆數減少很多,但可能資料還是有1000筆以上,如果通通從資料庫拉回到server進行隨機選取,勢必會拖慢效能。

例如:我們現在有三萬筆使用者的消費資料,我們要從中選單筆消費超過3000元的消費,進行抽獎選出1名幸運得主。

我們可以使用以下指令

其中$sample主要是透過size後面的數字來決定要選幾筆資料,如果要抽出的資料筆數,超過原本資料有的筆數,那只會回傳所有的資料。

另一個要介紹的操作符是$rand,它的作用和JavaScript的Math.random()類似,會隨機產生一個0到1之間的小數,如果想要隨機選取特定比例的資料出來,可以使用這個操作符。

例如:我們現在有跟上面一樣的使用者的消費資料,我們要從中選30%的資料出來進行分析,那麼可以使用以下指令。

上面指令背後運行的邏輯是,在搜尋每一筆資料的時候,會使用$rand隨機產生一個0~1的小數,判斷是否比0.3還要小,如果是則回傳這筆資料,因此可以做到隨機選30%的資料出來。

--

--

鰻魚燒

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