php – Laravel MongoDB 的 distinct 的 count() 用法

原因

官方提供的 distinct() 會在 php 取得所有列表。

當要計算數量如果使用 count() 那會把資料全部撈到 php 然後加總,這會非常吃 php-fpm 所使用的記憶體。

改用聚合

count() 這件事情在取出資料庫之前就完成,由資料庫回傳一個數值是最好的辦法。但現階段必須透過 laravel mongodb 的聚合寫法,以下範例示範:

1. 建立範例數據

image

2. 使用聚合做到 distinct

假設我要知道 test_orders 裡面總共出現幾個 name,那可以透過聚合的 pipeline 實現。先寫結論

image

這樣就達到我們要的目標 3 筆。

3. 肢解上述

上述 aggregate() 用了兩次處理,我們分開來看數據。第一次先算出各筆 name 的重複次數

image

看到這裡就知道這份數據,有 3 種 name。因此可以這麼寫

image

發表迴響