前面十天介紹不少aggregate用法,以簡單的小型專案來說,這些操作符基本上都夠用,熟練之後如果有接到其他特別的需求,其實自己再去MongoDB官網上找其他的操作符使用,不會有太大的問題,官網很貼心附上語法的範例,以及處理前後的資料。
因此接下來介紹的操作符,都比較進階或是比較冷門一點,大家可以參考看看,搞不好在未來的某一天會用到。
首先介紹$sample
,它可以讓我們從眾多的資料當中,隨機選出幾筆資料出來,這個很適合用在當你資料庫的資料很多,即使經過$macth
篩選過讓資料筆數減少很多,但可能資料還是有1000筆以上,如果通通從資料庫拉回到server進行隨機選取,勢必會拖慢效能。
例如:我們現在有三萬筆使用者的消費資料,我們要從中選單筆消費超過3000元的消費,進行抽獎選出1名幸運得主。
我們可以使用以下指令
其中$sample
主要是透過size後面的數字來決定要選幾筆資料,如果要抽出的資料筆數,超過原本資料有的筆數,那只會回傳所有的資料。
另一個要介紹的操作符是$rand
,它的作用和JavaScript的Math.random()類似,會隨機產生一個0到1之間的小數,如果想要隨機選取特定比例的資料出來,可以使用這個操作符。
例如:我們現在有跟上面一樣的使用者的消費資料,我們要從中選30%的資料出來進行分析,那麼可以使用以下指令。
上面指令背後運行的邏輯是,在搜尋每一筆資料的時候,會使用$rand
隨機產生一個0~1的小數,判斷是否比0.3還要小,如果是則回傳這筆資料,因此可以做到隨機選30%的資料出來。